通过卸载事件禁用BFcache(后向缓存)

时间:2013-08-02 14:27:44

标签: javascript jquery firefox caching browser-cache

(注意:仅限FireFox)

后向缓存是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,试图取消挂载事件,但仍无法正常工作

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

使用unloadhandler

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中测试一下。

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

要启用BFCache,您需要删除beforeunload事件侦听器。它应该是由Piwik代码添加的同一个侦听器,否则removeEventListener将不执行任何操作。

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

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