【问题标题】:Would an onbeforeunload handler really stop my page caching?onbeforeunload 处理程序真的会停止我的页面缓存吗?
【发布时间】:2014-07-31 11:38:23
【问题描述】:

在 2007 年的一篇名为“Mastering The Back Button With Javascript”的帖子中,Patrick Hunlock 声称只要在页面中包含 onbeforeunload 处理程序就会停止缓存。 (我猜是浏览器缓存。)他对此非常强调:

只要有一个 unbeforeunload 事件处理程序——不管它是否真的做任何事情,不管你是否产生一个对话框,即使整个函数声明完全由 { } 组成——只是 定义一个事件处理程序将阻止页面被缓存——永远。

事实上,即使你允许页面缓存,页面也会 不被缓存。 有一个 onbeforeunload 事件意味着页面将 每次访问时都重新构建。 Javascripts 将重新运行, 服务器端脚本将重新运行,页面将像 用户第一次点击它,即使用户必须 只需点击后退或前进按钮即可打开页面。

有趣的是,除了提到 Hunlock 帖子的一两个人之外,我在其他任何地方都找不到任何提及。任何人都可以澄清这个问题吗?这是真的吗,还是我可以安全地使用该事件?

【问题讨论】:

  • 我不知道,但缺乏参考/文档让我觉得这不好。即使它很好用,也不要。使用适当的缓存技术来完成你想要的
  • 谢谢伊恩 - 我不是想搞乱缓存,只是想知道我是否会破坏它。
  • 如果有卸载或onunloadhandler,当使用后退按钮离开或返回页面时,有很多谷歌引用firefox和safari不使用缓存。这是一个-madhatted.com/2013/6/16/you-do-not-understand-browser-history
  • 感谢 kennebec - 非常有趣的参考 FF 和 Safari 中的缓存“将 DOM 的当前状态存储在内存中”,以便在单击后退按钮时重新渲染。它说窗口上的卸载处理程序将破坏该缓存。
  • 呵呵,我今天也碰到了那篇“Mastering...”的老文章,然后我也想做一些事实检查(就像问题中一样),然后谷歌就放弃了我就在这儿。 :)

标签: javascript caching dom-events


【解决方案1】:

对于考古学家来说,这被记录为一个功能 introduced in Firefox 1.5

注意不要将缓存与浏览器历史记录(也称为存储)混淆 - 页面元素可能包含在两者中。如果期望的行为是在使用前进和后退导航按钮时强制浏览器从服务器重新加载 HTML 页面(例如,因为页面显示敏感信息,或者使用 Javascript 或 Ajax 调用更改了内容),那么应该使用Cache-control no-store - 或者最好同时使用no-storeno-cache

进一步阅读:

【讨论】:

    猜你喜欢
    • 2014-11-19
    • 1970-01-01
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多