8

私が扱っているジレンマは、jquery-bbq codeでは、IE6とIE7はhashchangeをサポートしていないため、ヒストリ状態を持つためにページを2度読み込んでいるためです。document.open呼び出しで開くhrefを定義する標準的な方法はありますか?

これは、コードがサーバー側とクライアント側の両方で2回実行されるため、悪影響を及ぼします。

if (is_old_ie) { 

    // Create hidden IFRAME at the end of the body. 
    iframe = $('<iframe src="javascript:0"/>').hide().appendTo('body')[0].contentWindow; 

    // Get history by looking at the hidden IFRAME's location.hash. 
    get_history = function() { 
     return get_fragment(iframe.document.location.href); 
    }; 

    // Set a new history item by opening and then closing the IFRAME 
    // document, *then* setting its location.hash. 
    set_history = function(hash, history_hash) { 
     if (hash !== history_hash) { 
     var doc = iframe.document; 
     doc.open().close(); 
     doc.location.hash = '#' + hash; 
     } 
    }; 

    // Set initial history. 
    set_history(get_fragment()); 
    } 

javascript:0のSRCと空白のiframeが作成されます。IFRAMEを作成するために使用される方法はこれです。 document.openメソッドが呼び出され、.openで開くページのデフォルトとして、親ウィンドウのlocation.hrefを取得したようです。

私は基本的にコードを修正して同じURLを2度開かないようにしなければならないので、デフォルトを上書きして、?iframe = trueのようなパラメータを指定します。

例:IEで

http://example.com/views/step-2?one=two

は、上記のページがロードされ、その後、iframe内に再ロードされます。サーバーサイドのコードはを2回、を2回実行しますが、そのようなことは起こりたくありません。

&iframe=1をURIに追加して、iframeパラメータが指定されている場合、サーバー側コードが実行されないようにしたいと考えています。

二つの最も明白なものは以下のとおりです。

  1. は、IFRAMEのSRCを設定しますが、これはマイナスの影響を与える可能性があり、私はそれが理由でありますかなり確信しています。
  2. document.open.closeの代わりにiframe.location.hrefを使用し、手動でhrefに設定します。

誰かがiframeハッキングを経験していれば、私はいくつかのヒントを大いに感謝しています。

EDIT:1に等しい「iframeloading」のセッション変数を作成し、私は、IFRAMEがdocument.openを行う前に、セッションのVARを設定しIFRAME/AJAXによるページをロードされるだろうと思った別の回避策、および標準はあります」について

$('<iframe src="/iframe-loading.php"/>').hide().appendTo('body'); 
document.open().close() 
$(document.defaultView).load(function() { 
    $('<iframe src="iframe-doneloading.php/>').hide().appendTo('body'); 
}); 
+0

jqueryでハッシュ変更イベントを処理する別の方法を教えても問題が解決しない場合は、 – ygaradon

+0

ハッシュチェンジの読み込みを2回修正することができれば、時間を大幅に節約できます。 jQuery BBQのドキュメントには、「以前はなく、document.readyの「hashchange」イベントにバインドしてください。そうしないと、IE6/7で失敗する可能性があります。それはあなたの問題じゃないですか?また、プロジェクトのGitHubページ(https://github.com/cowboy/jquery-bbq/issues)に問題を投稿することもできます –

答えて

1

:0に戻し、それを設定するのiframe負荷の負荷イベントハンドラを設定し、セッションVARは、同様の1何かに設定されている場合に実行しないように私のサーバー側のコードを調整document.open呼び出しで開くhrefを定義する方法は? "

いいえ、ありません。

関連する問題