1

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

我有一个window.onunload事件,我设置了一个 cookie(在这种情况下使用 YUI,但本机 JS 或 jQuery 也可以工作)。此 cookie 通常在 HTTP 请求中发送到服务器,服务器端代码会在其中查找它。如果 cookie 存在,它可以采取特殊的行动。

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

当用户通过页面上的链接从一个页面转到另一个页面时,这可以正常工作。但是,当用户重新加载页面时,在 Firefox 和 Chrome 中设置了 cookie(即我验证了代码是通过 Firebug/Chrome DevTools 执行的),但是 cookie 没有发送到服务器,所以服务器不能采取特别行动。

有没有人遇到过这个并且知道为什么?这种行为是否已融入这两个浏览器?

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

4

1 回答 1

1

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

首先,您应该知道该onunload方法(我上次检查过)不允许阻止用户离开页面。如果是这样,我想会有更多的恶意网站!

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

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

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

于 2013-09-16T14:24:47.347 回答