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

时间:2013-09-15 02:29:46

标签: javascript google-chrome firefox

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

我有一个window.onunload事件,我在其中设置了一个cookie(在这种情况下使用YUI,但本机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事件处理程序。我仍然不确定为什么浏览器会像这样。

1 个答案:

答案 0 :(得分:1)

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

首先,您应该知道onunload方法(最后一次检查)不允许用户阻止用户离开页面。如果是的话,我认为会有更多恶意无法逃避的网站!

可以做什么(在某些浏览器上,无论如何)会提示用户留言,并让用户有机会取消导航。

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

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