javascript - 为什么在 Firefox 或 Chrome 中重新加载页面会导致浏览器调用服务器后触发卸载事件处理程序?

标签 javascript google-chrome firefox

我注意到 Firefox 和 Chrome 处理重新加载的方式有些奇怪,我想知道是否有其他人遇到过这种情况并且可能知道原因。

我有一个 window.onunload 事件,我在其中设置了 cookie(在本例中使用 YUI,但 native JS 或 jQuery 的工作原理相同)。该 cookie 通常在 HTTP 请求中发送到服务器,服务器端代码会在其中查找它。如果 cookie 存在,它可以采取特殊操作。

window.onunload = function() {
    Y.Cookie.set('reset_function', 'true', { path: '/'}); 
}

当用户通过页面上的链接从一个页面转到另一页面时,这种方法效果很好。但是,当用户重新加载页面时,cookie 会在 Firefox 和 Chrome 中设置(即我验证代码是通过 Firebug/Chrome DevTools 执行的),但 cookie 不会发送到服务器,因此服务器无法采取专项行动。

有人遇到过这种情况并知道原因吗?这种行为是否已融入这两个浏览器中?

编辑:当我进一步调试时,在重新加载时,Chrome 和 Firefox 首先访问服务器,然后执行 onunload 事件处理程序。我仍然不确定为什么浏览器会这样。

最佳答案

我可能是错的,但我的猜测是这只是性能优化。

首先,您应该知道 onunload 方法(我上次检查过)不允许阻止用户导航离开页面。如果是的话,我认为将会有更多不可避免的恶意网站!

可以做的事情(无论如何,在某些浏览器上)是通过消息提示用户,并为用户提供取消导航的机会。

由于此提示需要一些非零时间,浏览器开发人员(Chrome 和 Firefox)可能决定先发出请求,这样如果用户暂停片刻然后确认,后续页面将尽快加载。

我真的不知道这是否准确,但这是一种可能的解释。请注意,onunload 方法是 not part of any standard ,这意味着它的行为无论如何都没有完全明确定义,这意味着浏览器制造商可以自由地将请求放在事件处理程序之前或之后,据我所知。

关于javascript - 为什么在 Firefox 或 Chrome 中重新加载页面会导致浏览器调用服务器后触发卸载事件处理程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808376/

相关文章:

javascript - 如何在 Tampermonkey 中获取表格单元格值?

css - 在 IE/Chrome/Firefox 中打印预览(或打印)时不显示图像

javascript - 如何使用 Safari 扩展程序打开新的私有(private)窗口?

javascript - 查看源书签 : Retrieve original source?

javascript - 为什么扩展 native 对象是一种不好的做法?

javascript - 粘性 'back to top' 按钮在 iMac Firefox 中有效,但在 Safari、Chrome 或 Android 手机中无效

jquery - 检索选项的背景颜色时 .css 在 firefox 中的奇怪行为

javascript - 更改 Firefox 中的警报选项卡/窗口焦点

Javascript 到 CSV 函数与 IE 或 Firefox 不兼容

javascript - 我们如何访问angular js中的php变量?