IEリロードiframe



最近、IE 9、IE 10、firefox、chromeブラウザのiframe更新に力を入れています.IEブラウザでは、iframeをリフレッシュする方法によってキャッシュがロードされることがわかりました.以下に、IE 9、IE 10(以下、IEという)におけるいくつかの方法の効果について説明する.
 
1、iframeのsrc属性に値を再割り当てしてリフレッシュを実現する
$("#iframeId").attr("src", $("#iframeId").attr("src"));

IEでは、この方法でiframeをリフレッシュする効果はありません.iframe反応は穏やかでした.
 
    2、location.replace(URL)メソッド
 $("#iframeId")[0].contentWindow.location.replace(url);
  
 document.getElementById("iframeId").contentWindow.location.replace(url);

  : contentWindow.location.replace === contentWindow.document.location.replace 
            true,            。

W 3 Schoolではこの方法について(1).replace()メソッドは、現在のドキュメントの代わりに新しいドキュメントを使用できます.
                                                                  (2). replace()メソッドでは、Historyオブジェクトに新しいレコードは生成されません.使用する
この方法では、新しいURLがHistoryオブジェクトの現在のレコードを上書きします.
すなわち、このメソッドは、現在キャッシュされている履歴を指定したURLで置き換えるため、replaceメソッドを使用した後は、「前進」および「後退」で置き換えられたURLにアクセスできない.
しかしIEではこの方法と説明の効果を用いる.現在の履歴は、新しいurlコンテンツで置き換えられます.
    
    3、location.reloadメソッド
 $("#iframeId")[0].contentWindow.location.relaod(true); 
  
 document.getElementById("iframeId").contentWindow.location.reload(true);

  : contentWindow.location.reload === contentWindow.document.location.reload 
            true,            。

   
この方法は、現在のページを再ロードするために使用されます.オプションパラメータ:forceはBooleanタイプです.
W 3 Schoolにおけるこの方法の説明:(1).このメソッドにパラメータが規定されていない場合、またはパラメータがfalseである場合、HTTPヘッダが使用されます.
If-Modified-Sinceは、サーバ上のドキュメントが変更されたかどうかを検出します.
                                                         (2). ドキュメントが変更された場合、reload()は再びドキュメントをダウンロードします.
                                                         (3). ドキュメントが変更されていない場合、このメソッドはキャッシュからドキュメントをロードします.ユーザーが
ブラウザのリフレッシュボタンの効果はまったく同じです.
                                                         (4). このメソッドのパラメータをtrueに設定すると、ドキュメントの最終変更日にかかわらず
キャッシュを迂回して、サーバからドキュメントを再ダウンロードします.これはユーザーと
ブラウザの更新ボタンをクリックしたときにShift健を押す効果はまったく同じです. 
 
この方法こそiframeを再ロードする正しい方法であることがわかる.IEでこのメソッドを使用すると、サーバから新しいページが再取得され、ロードされません.
キャッシュ.
 
4、キャッシュの置き換え
この方法では、サーバから新しいページを再取得できますが、現在のウィンドウのみを取得できます.iframeに2つ以上のジャンプ可能なページがある場合は、これらのページを再ロードします.この場合reloadメソッドは,あまり適用されない(reloadメソッドではサーバから複数のページを同時に取得できないため).
したがって、IEでは、ajaxを使用してこれらのページをGETし、ローカルのキャッシュを更新し、iframeをリフレッシュする代わりに使用することができます.次の方法はajaxでローカルのキャッシュを置き換える方法です.
$.ajax({
    type: "GET",
    url: url,
    dataType: "text",
    beforeSend: function (xmlHttp) {
        xmlHttp.setRequestHeader("If-Modified-Since", "0");
        xmlHttp.setRequestHeader("Cache-Control", "no-cache");
    }
}).done(function () {
    console.log('replace cache ok');
})

 
If-MOdified-Sinceはキャッシュページ時間を制御し、HTTPリクエストを送信する際にブラウザ側キャッシュページの最終修正時間を一緒にサーバに送信し、サーバはこの時間をサーバ上の実際のファイルの最終修正時間と比較する.
Cache-Controlは、ページをキャッシュするかどうかを制御します.