BFcache被卸载事件禁用(后退-前进缓存)

BFcache disabled by unload events (Back-Forward cache)

本文关键字:缓存 后退 卸载 事件 BFcache      更新时间:2023-09-26

(注意:仅限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,试图取消设置onload事件,但仍然无法工作

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

使用卸载程序

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

@baked的建议

http://users.telenet.be/prullen/bfcache/e.htmlhttp://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之前插入代码,您可以尝试覆盖addEventListener,跟踪添加的处理程序,并公开函数以一次删除所有跟踪的处理程序。