JavaScriptを使用してページをリロードし、ブラウザーのキャッシュからプルしないで、代わりにサーバーからページをリロードする必要があります。 [ページの要素は暫定的に変更されるため]
IEとFFでは、次のコードが正常に機能することがわかりました。
_window.location.reload(true);
_
ただし、ChromeまたはSafariでは機能しません。
私は次のことを試しましたが、役に立ちませんでした。
_window.location.replace(location.href);
document.location.reload(true);
document.location.replace(location.href);
_
この問題の解決策はありますか?
調査結果
これを調べたところ、この問題はHTTPプロトコルの処理であることがわかりました。
Pragma: no-cache
_ HTTPフィールドを含むリクエストを送信しますLast-Modified: DATE1
_フィールドで応答しますlocation.reload(true)
を使用して、キャッシュではなくサーバーからのリロードを強制しますIf-Modified-Since: DATE1
_フィールドを含むリクエストを送信しますHTTP Status 304 Not Modified
_で応答しますサーバーアプリケーションは、動的なページコンテンツの状態の変化に気付かず、_200
_を返さないのが原因です。ただし、JS location.reload(true)
が呼び出されたときに_If-Modified-Since
_フィールドを送信する唯一のブラウザはChrome/WebKitです。
他の誰かが同じ問題に遭遇した場合に備えて、ここに私の調査結果を入れようと思いました。
あなたはこのハックを使うことができます:
$.ajax({
url: window.location.href,
headers: {
"Pragma": "no-cache",
"Expires": -1,
"Cache-Control": "no-cache"
}
}).done(function () {
window.location.reload(true);
});
ページがキャッシュから読み込まれないようにするには、クエリに一意の番号を追加します。
window.location = location.href + '?upd=' + 123456;
123456の代わりに日付を使用することもできます
素晴らしい発見!私は同じ問題に遭遇しましたが、これは本当に役に立ちます!ただし、検索結果に加えて、Chromeは常にlocation.reload()のGETリクエストを送信します... IE/FFが最後のリクエストを繰り返しています。
これは、私のアプリケーションファイルがChromeに強制的にリロードされるようにするために行うことです。
var oAjax = new XMLHttpRequest;
oAjax.open( 'get', '/path/to/my/app.js' );
oAjax.setRequestHeader( 'Pragma', 'no-cache' );
oAjax.send();
oAjax.onreadystatechange = function() {
if( oAjax.readyState === 4 ) {
self.location.reload();
}
}
window.location = window.location
をお試しください