12

私のWebアプリケーションではwindow.location、別のページに移動するように設定していますが、何らかの理由でFirefoxはそのページの古いバージョンを表示します。

Firebugを使用して、ブラウザがHTTPリクエストを送信することすらなく、そのページの古いバージョン(最後のページも含まない)を使用して表示することを検出しました。

ページ自体には、キャッシュを防ぐための通常のヘッダーがすべて含まれています。これは、リンクまたは手動入力を使用してページを参照するときに完全に機能します。この問題は、を設定するときにのみ発生しますwindow.location

これはFirefoxの問題ですか、それともブラウザに期待される問題ですか?この動作を変更できますか?

4

5 に答える 5

32

ブラウザに新しいリクエストを発行させるために、ページのURLにランダムなパラメータを追加するだけです。

したがって、使用する代わりに

 window.location = "my.url/index.html";

使用する

 window.location = "my.url/index.html?nocache=" + (new Date()).getTime();
于 2013-01-07T13:50:07.240 に答える
6

常にキャッシュをバイパスするtrue引数を指定してlocation.reloadを使用できます。

window.location.reload(true);
于 2013-01-07T13:49:21.913 に答える
0

時間固有またはランダムなクエリ文字列値をURLに追加します。これにより、ページが強制的に再読み込みされます。

var yourNewLoc = "http://newlocation.com/";
document.location = yourNewLoc + "?c=" + (new Date()).valueOf();
于 2013-01-07T13:51:44.483 に答える
0

URLに既存のクエリパラメータがあるかどうかを検証する必要があります。クエリパラメータが存在する場合は、「&」を使用してタイムスタンプを追加する必要があります。私はあなたの助けになるかもしれない簡単なスニペットを書きました。

window.newLocation = function( location ) {
    var newLocation = ( typeof location === "string" ) ? location : window.location.href,
       appendType = ( newLocation.indexOf("?") < 0 ) ? "?" : "&";
    window.location = newLocation + appendType + "_t=" + (new Date()).getTime();
}

使用法:

newLocation("index.html") or window.newLocation("index.html") 
// opens "index.html?_t=<timstamp>"

newLocation("index.html?existingQuery=true") or window.newLocation("index.html?existingQuery=true") 
// opens "index.html?existingQuery=true&_t=<timstamp

newLocation() or window.newLocation() 
// opens existing window location with a timestamp

スニペットをさらに変更して、クエリパラメータの既存のタイムスタンプを削除し、重複を回避することができます

于 2013-01-07T14:46:31.260 に答える
0

ダウンロード機能(Laravelの場合はコントローラー内)にヘッダーを設定してキャッシュしないように指示する必要があります。Laravelには次のコードを使用します。

$headers =[
            'Content-Type' => 'application/text',
            'Cache-Control' => 'no-store, no-cache, must-revalidate, max-age=0',
            'Cache-Control' => 'post-check=0, pre-check=0, false',
             'Pragma' => 'no-cache',  ];
return response()->file($pathToFile, $headers);

このコードはPhPにも非常に当てはまり、それに応じてコードを転送する必要があります。特にtemporarySignedLinkなどを使用している場合は、新しい日付を追加するとリンクが無効になる可能性があります。

乾杯

于 2019-10-18T14:57:24.197 に答える