2011-01-27 6 views
2

jQueryスクリプトで単純なリダイレクトを使用しています。リンクをクリックすると、非同期保存が実行され、window.location.href経由で次のページにユーザーが送信されます。 IE(驚きの驚き)に問題があることを除いて、これはすべてのブラウザで正常に動作します。 IE内の1つのページで、奇数は何スクリプトIEのjQuery window.location.hrefの問題、nullまたはオブジェクトエラーではありません。それはGoogleのマップかもしれませんか?

E.location.protocol is null or not an object 

を実行しようとしたとき、私は次のエラーを取得する、スクリプトは他のページで動作することです。私が見ることができる唯一のことは、それが壊れているページにはGoogleマップが含まれているのに対し、他のマップは含まれていないということです。

また、これはjQuery(1.4+)のそれ以降のバージョンでのみ問題があるようですが、他の機能にはこの機能を使用する必要があります。

提案がありますか?ありがとうございました。

(ページ内のアンカータグの「後藤」属性からその場所を取得する)スクリプトをリダイレクトし、保存します。

$("#save_and_go_button").click(function(){ 
    showAction('Saving...');   
    $.ajax({ 
    type: "POST", 
    url: "/admin_and_tools/async/save.php", 
    data: $("#main_form").serialize(), 
    dataType: "html", 
    success: function(results){ 
    if(results == 'success'){ 
    hideAction(); 
    //alert('The record has been saved.'); 
    document.location.href = $("#save_and_go_button").attr('goto'); 
    }else{ 
    alert('failed' + results); 
    } 
    } 
    });   
}); 

編集:ここでは、jQueryのコード内にない行は次のとおりです。

if(E.location.protocol!=="file:") 
    try{return new E.XMLHttpRequest}catch(a){}try{ 
return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}; 
+0

'document.location.href'にアクセスしています(とにかく、うまくいくはずです) – jAndy

+0

" document.location.href "は" window.location.href "とまったく同じではありません - ドキュメント...読み込み専用になっていますが、一部のブラウザではそれを尊重しません。 –

答えて

0

、私は周りの仕事としてやったことのjQuery 1.4からこれをドロップすることである

window.location.hrefへ.4ソース

/* 
* Create the request object; Microsoft failed to properly 
* implement the XMLHttpRequest in IE7 (can't request local files), 
* so we use the ActiveXObject when it is available 
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so 
* we need a fallback. 
*/ 

if (window.ActiveXObject) { 
    jQuery.ajaxSettings.xhr = function() { 
     if (window.location.protocol !== "file:") { 
      try { 
       return new window.XMLHttpRequest(); 
      } catch(xhrError) {} 
     } 

     try { 
      return new window.ActiveXObject("Microsoft.XMLHTTP"); 
     } catch(activeError) {} 
    }; 
} 

これで動作するようです。現在、defはdocument.location.hrefがまったく好きではありませんが、window.location.hrefだけが使用されます。だから私は知らない。これはおそらく私のアプリケーションの他の部分をクラッシュさせるでしょう。

これを更新してください。更新 - これまでのところ、とても良い。

+1

私はここにフォローアップすることができます。私はばかです。実際に数ヶ月後に私が最終的に見つけたのは、元の場所変数を破壊して、グローバルとしてvarの場所を再宣言していたというスクリプトがあったということです。それは私のGoogleマップ初期化スクリプトにあったので、それは私がGoogleマップが物事を台無しにしていたと思った方法です。このエラーを見つけるのを助けてくれたJSLintにありがとう。 – dgig

1

代わりの

document.location.href = $("#save_and_go_button").attr('goto'); 

使用

window.location.href = $("#save_and_go_button").attr('goto'); 

私が理解しているからdocument.location is read-only。 Geckoの ブラウザはあなたがよく としてそれに割り当てることができますが、

document.locationは、もともと 読み取り専用のプロパティでした。クロスブラウザの安全性を確保するには、 window.locationを代わりに使用してください。

+0

私はそれがうまくいったと言いたいと思うが、私はまだ同じエラーが発生します。これは、jQuery 1.4.4内で次の行で消滅します(これを含めるように私の質問を編集します):if(E.location.protocol!== "file:"){return new E.XMLHttpRequest} catch(a) {} try {新しいE.ActiveXObject( "Microsoft.XMLHTTP")} catch(b){}}を返します。 – dgig

1

変更document.location.hrefこれは時々アップ作物IEと古い問題:)まあ

+0

残念ながら、私はここで同じエラーが発生します。これは、jQueryソースのコード行(質問に追加されています)にあり、ActiveXコンテンツを扱っています。 – dgig

関連する問題