3 回答
TA贡献1789条经验 获得超10个赞
当我使用Firefox上的后退按钮访问以前访问过的页面时,该页面上的脚本将不再运行。
这是正确的,这是一件好事。
当您点击Firefox(以及Safari和Opera)中的链接时,它不会立即销毁您的页面以进入下一个页面。它使页面保持完整,只是将其隐藏在视图之外。如果您点击后退按钮,它将使旧页面重新进入视图,而无需再次加载文档; 这要快得多,从而为用户提供更平滑的后退/前进页面转换。
此功能称为bfcache。
您在用户之前加载和使用它时添加到页面的任何内容仍将存在。您附加到页面元素的任何事件处理程序仍将附加。您设置的任何超时/间隔仍将处于活动状态。因此,您很少有任何理由需要知道您已被隐藏并重新显示。onload
再次调用或内联脚本代码是错误的,因为您在该函数中执行的任何绑定和内容生成将在同一内容上执行第二次,可能会带来灾难性的后果。(例如document.write
,在内联脚本中会完全破坏页面。)
写入的原因window.onunload
是,实现bfcache的浏览器已决定 - 为了与真正需要知道何时被丢弃的页面兼容 - 任何声明有兴趣知道何时onunload
发生的页面都会导致bfcache被禁用 当你回到它时,该页面将被新加载,而不是从bfcache中获取。
所以,如果你设置window.onunload= function() {};
,你实际做的是故意打破bfcache。这将导致您的页面导航速度变慢,除非作为最后的手段,否则不应使用。
如果您确实需要知道用户何时离开或返回到您的页面,而不会弄乱bfcache,则可以捕获onpageshow
和onpagehide
事件:
window.onload=window.onpageshow= function() { alert('Hello!');};
TA贡献1820条经验 获得超10个赞
您可以查看活动的persisted
属性pageshow
。初始页面加载时设置为false。从缓存加载页面时,它设置为true。
window.onpageshow = function(event) { if (event.persisted) { alert("From bfcache"); }};
出于某种原因,jQuery在事件中没有此属性。你可以从原始活动中找到它。
$(window).bind("pageshow", function(event) { if (event.originalEvent.persisted) { alert("From bfcache"); }});
添加回答
举报