BFcache被卸载事件禁用(后退-前进缓存)
BFcache disabled by unload events (Back-Forward 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,试图取消设置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
,跟踪添加的处理程序,并公开函数以一次删除所有跟踪的处理程序。
- 如何在从浏览缓存加载页面时执行javascript
- 如何在Facebook上的iframe应用程序中使后退按钮返回到上一页
- 当浏览器上的后退按钮到达主页时,我需要删除Class
- ReactJS和SpringDataRest缓存问题可能与websocket有关
- 缓存谷歌地图数据
- 防止jQuery Mobile中的ajax缓存
- JSP 缓存和后退按钮
- 浏览器上的“后退”按钮使无缓存页面可访问
- jQuery:加载具有ajax,缓存,干净URL和后退按钮支持的页面
- 如何在IE中调试“后退导航缓存”
- 使用后退按钮时如何防止Safari ios移动缓存
- Internet Explorer 10 后退按钮缓存
- Chrome后退按钮:仅提供初始页面的缓存版本,没有任何Ajaxed内容
- BFcache被卸载事件禁用(后退-前进缓存)
- 单击后退按钮时阻止从缓存加载safari
- 后退按钮缓存的页面加载顺序
- 如何保存/缓存dom,以便在点击后退按钮时页面按原样加载
- 防止页面重新加载后退按钮(使用缓存).或者向下滚动用户.(至少在iPhone上发行)
- 当客户端通过点击后退按钮进入页面时,如何使其加载新副本而不是缓存的副本
- Safari/Webkit的后退按钮从缓存加载页面,而不是一个新的副本