web-dev-qa-db-ja.com

Safari5の戻るボタンのキャッシュを防ぐ

最近サファリ5がリリースされたので、私のウェブサイトにいくつかの問題を引き起こすことが判明しました。クラシックASP(それほど重要ではありませんが)を実行している動的なWebサイトがあり、サイトには履歴スタックがクリエイティブに使用されています。たとえば、製品を一覧表示するページを表示できます。 、次に製品の詳細に移動し、製品を変更します(admin-view)。製品で[保存]をクリックすると、情報がAJAX経由でサーバーに送信され、history.back()が発行されます。これはうまく機能します。ただし、すべてのブラウザ(safari <= 4を含む)では、新しくリリースされたsafari 5では機能しなくなりました。safari5をもう一度クリックしても、実際にはページが更新されず、キャッシュから読み込まれるだけのようです。詳細ビューで行われた変更が表示されないことを意味します。これをsafari5でも機能させるにはどうすればよいですか?これは、キャッシュをオフにする必要がある現在のコードです(すべてのページの上部に含まれています)。

Dim pStr
pStr = "private, no-cache, no-store, must-revalidate"
Response.AddHeader "pragma","no-cache"      '?
Response.AddHeader "cache-control", pStr    '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "cache-control", "post-check=0, pre-check=0"     '?  Er ikke sikker på om disse 3 siste er nødvendige.
Response.AddHeader "Expires", "Mon, 26 Jul 1997 05:00:00 GMT"       '?
Response.AddHeader "Last-Modified", Now()
23
Alxandr

空のunloadハンドラーは機能しなくなります。代わりに、persistedイベントのonpageshowプロパティを確認できます。最初のページの読み込み時にfalseに設定されます。ページがbfcacheからロードされると、trueに設定されます。

Kludgishの解決策は、ページがbfcacheからロードされるときに強制的にリロードすることです。

window.onpageshow = function(event) {
    if (event.persisted) {
        window.location.reload() 
    }
};

JQueryを使用している場合は、次のようにします。

$(window).bind("pageshow", function(event) {
    if (event.originalEvent.persisted) {
        window.location.reload() 
    }
});
46
Mika Tuupola

グーゲルと掘り下げた後、私は解決策を見つけましたが、それについてはあまり満足していません。 bodyタグに_onunload=""_を設定すると、Safariはページを無効にし、window.history.back();にリロードします。

7
Alxandr

別の方法は次のとおりです。

    function invalidateBackCache() {
        // necessary for Safari: mobile & desktop
    }

    window.addEventListener("unload", invalidateBackCache, false);

.NetのbodyタグにHTML(onunload = "")を追加すると、私の場合は3つのファイルを変更する必要があったため、このルートを選択しました。 jQueryでonunload属性を設定しても、それは解決されませんでした。

これはモバイルSarfari(iPad)でも機能します。

3
webXL