23

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

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()
4

3 に答える 3

45

空の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() 
    }
});
于 2013-03-19T10:52:05.423 に答える
7

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

于 2011-03-14T23:37:30.387 に答える
3

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

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

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

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

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

于 2011-09-22T16:33:57.947 に答える