(注意:仅适用于FireFox)

Back-Forward缓存是firefox中的缓存系统,单击后退按钮后即可运行。然后,它将仅使用缓存中上一页中的DOM,而不是重新加载整个页面(并重新请求文件)。

我正在使用piwik(分析服务),需要将跟踪代码段添加到页脚中。添加后,后退缓存将不再起作用。

据我了解,如果发生卸载事件(或beforeunload),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中对此进行测试。

有任何想法吗?

最佳答案

为了启用BFCache,您需要删除beforeunload事件监听器。它应该与Piwik代码添加的监听器相同,否则removeEventListener不会执行任何操作。

该侦听器在Piwik的来源之外无法访问,因此不能简单地将其删除。

但是,如果您可以在Piwik之前插入代码,则可以尝试override addEventListener ,跟踪添加的处理程序并公开函数以一次删除所有跟踪的处理程序。

09-25 18:42