3

(注意:仅限火狐)

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 回答