3

(注: FireFox のみ)

Back-Forward キャッシュは、戻るボタンがクリックされたときに実行される Firefox のキャッシュ システムです。次に、ページ全体をリロードする (およびファイルを再要求する) 代わりに、キャッシュにある前のページの DOM を使用するだけです。

フッターにトラッキング コード スニペットを追加する必要がある piwik (分析サービス) を使用しています。これを追加すると、バックフォワード キャッシュが機能しなくなります。

アンロード イベント (またはアンロード前) がある場合、bfcache は自動的に無効になることを理解しています。これはおそらくここで起こっていることです。

とにかくBFCacheを機能させるために追加できるものはありますか?

さらに悪いことに、piwik コードの下にカスタム コードを追加することはできません。それは常に最後です。

以下に示すコードを追加して、登録されているアンロード イベントを削除しようとしましたが、BFcache はまだ機能していません。

$(window).unbind('beforeunload');
$(window).unbind('unload');
window.onbeforeunload = null;
window.onunload = null;

私も試しました:

function UnloadHandler() { 
    window.removeEventListener('unload', UnloadHandler, false); 
}

window.addEventListener('unload', UnloadHandler, false);

$(window).unload(function () { $(window).unbind('unload'); });

しかし、これもうまくいきません。

いくつかのサンプルをオンラインに配置しました。これを Firefox でテストすることを忘れないでください:

これは動作中の BFcache を示しています ([戻る] ボタンがクリックされたかどうかに基づいて、異なるアラートが表示されます)。

http://users.telenet.be/prullen/bfcache/a.html

ロードされた piwik、BFCache が機能しなくなりました

http://users.telenet.be/prullen/bfcache/b.html

piwik をロードし、onload イベントの設定を解除しようとしましたが、まだ機能していません

http://users.telenet.be/prullen/bfcache/c.html

アンロードハンドラの使用

http://users.telenet.be/prullen/bfcache/d.html

@roasted による提案

http://users.telenet.be/prullen/bfcache/e.html http://users.telenet.be/prullen/bfcache/f.html

BFCache に関する詳細情報:

https://developer.mozilla.org/en-US/docs/Using_Firefox_1.5_caching

ここで動作の別のデモを見ることができます:

http://www.twmagic.com/misc/cache.html

dom 要素を追加し、最初のリンクをクリックしてから戻ると、dom 要素はまだそこにあります。ただし、onload または beforeunload イベントを追加すると、そうではありません。もう一度、これを firefox でテストします。

何か案は?

4

1 に答える 1

3

BFCache を有効にするには、beforeunloadイベント リスナーを削除する必要があります。これは、Piwik コードによって追加されたものと同じリスナーでなければなりません。そうでない場合、removeEventListenerは何もしません。

そのリスナーは、Piwik のソースの外では到達できないため、単純に削除することはできません。

ただし、Piwik の前にコードを挿入する可能性がある場合は、オーバーライドaddEventListenerを試み、追加されたハンドラーを追跡し、関数を公開して、追跡されたすべてのハンドラーを一度に削除することができます。

于 2013-12-11T16:09:18.323 に答える