2013-01-07 6 views
8

ウェブアプリケーションでは、別のページに移動するようにwindow.locationを設定していますが、何らかの理由でFirefoxにそのページの古いバージョンが表示されます。キャッシュを使用する代わりに、window.locationにHTTP要求を強制するにはどうすればよいですか?

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

リンクまたは手動入力を使用してページをブラウズすると完全に機能するキャッシュを防止するために、ページ自体にall the usual headersがあります。この問題は、window.locationを設定した場合にのみ発生します。

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

答えて

19

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

ので、代わりの

window.location = "my.url/index.html?nocache=" + (new Date()).getTime(); 
+0

良い古いキャッシュバスター:)私は今、それを使用していますが、これは 'window.location'の設計された動作であるか、ここで何か間違っているかのようにいくつかの背景情報にも興味があります。 –

+0

あなたのページにページをキャッシュしないと言っているHTTPヘッダーが付いている場合、私はそれがチャージされるとは思わない。しかし、「キャッシュなし」ヘッダーを使用しないと、帯域を節約するためにできるだけキャッシュするのが良い動作です。 Cahcningは、ユーザーのブラウザとプロキシなどのさまざまなインターネット機器の両方で発生する可能性があります。したがって、より良い方法は、ページのキャッシュを制御することです。しかし、 "キャッシュバスター"は簡単な方法です... – mortb

2

trueの引数でlocation.reloadを使用できます。これは、常にキャッシュをバイパスします。

window.location.reload(true); 
+0

を避けるために、クエリパラメータにタイムスタンプを出削除するスニペットを変更することができます。このコマンドを使用して、キャッシュをバイパスして他のサイトに移動することはできません。 –

0

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

使用を使用しては、URLにいくつかの時間に特定のまたはランダムなクエリ文字列値を追加します。これにより、ページが強制的にリロードされます。

var yourNewLoc = "http://newlocation.com/"; 
document.location = yourNewLoc + "?c=" + (new Date()).valueOf(); 
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 

あなたは、さらにこれが唯一の実際のサイトをリロードする重複

関連する問題