Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在Firefox或Chrome中重新加载页面会导致卸载事件处理程序在浏览器调用服务器后触发?_Javascript_Google Chrome_Firefox - Fatal编程技术网

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

Javascript 为什么在Firefox或Chrome中重新加载页面会导致卸载事件处理程序在浏览器调用服务器后触发?,javascript,google-chrome,firefox,Javascript,Google Chrome,Firefox,我注意到Firefox和Chrome句柄重新加载的方式有些奇怪,我想知道是否有其他人遇到过这种情况,也许知道原因 我有一个window.onunload事件,在该事件中我设置了一个cookie(在本例中使用YUI,但是原生JS或jQuery也可以使用)。此cookie通常以HTTP请求的形式发送到服务器,服务器端代码在服务器上查找它。如果cookie存在,它可以采取特殊操作 window.onunload = function() { Y.Cookie.set('reset_functi

我注意到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事件处理程序。我仍然不确定浏览器为什么会这样运行。

我可能错了,但我猜这只是性能优化

首先,您应该知道,
onunload
方法(上次我选中)是不允许的,以防止用户导航离开页面。如果是的话,我想会有更多的恶意不可避免的网站

它所能做的(无论如何,在某些浏览器上)是向用户提示一条消息,并给用户取消导航的机会

由于此提示花费了一些非零的时间,浏览器开发人员(对于Chrome和Firefox)可能已经决定先发出请求,因此如果用户暂停片刻,然后确认,随后的页面将尽快加载


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

我可能错了,但我猜这只是一个性能优化

首先,您应该知道,
onunload
方法(上次我选中)是不允许的,以防止用户导航离开页面。如果是的话,我想会有更多的恶意不可避免的网站

它所能做的(无论如何,在某些浏览器上)是向用户提示一条消息,并给用户取消导航的机会

由于此提示花费了一些非零的时间,浏览器开发人员(对于Chrome和Firefox)可能已经决定先发出请求,因此如果用户暂停片刻,然后确认,随后的页面将尽快加载


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

它可能是从缓存中获取页面吗?我认为它不是缓存,因为在重新加载过程中发送了其他浏览器cookie。我还禁用了Chrome中的浏览器缓存,它没有发送cookie,但在重新加载页面时它仍然被设置当用户单击一个需要一段时间才能加载的链接时,文档不会立即变为“空白”,并且在新内容到达之前不会显示任何内容(如果用户当时盯着空白屏幕看,那将是不好的)–因此“卸载”在此之前,窗口的内容和资源是没有意义的。当单击页面上的链接时,onunload事件会在向服务器发出请求之前触发。但是,当我点击reload时,对服务器的请求甚至在onunload触发之前发生。因此,您的陈述不完全正确。可能是从缓存中获取页面吗?我认为不是缓存,因为在重新加载过程中会发送其他浏览器cookie。我还禁用了Chrome中的浏览器缓存,它没有发送cookie,但在重新加载页面时它仍然被设置当用户单击一个需要一段时间才能加载的链接时,文档不会立即变为“空白”,并且在新内容到达之前不会显示任何内容(如果用户当时盯着空白屏幕看,那将是不好的)–因此“卸载”在此之前,窗口的内容和资源是没有意义的。当单击页面上的链接时,onunload事件会在向服务器发出请求之前触发。但是,当我点击reload时,对服务器的请求甚至在onunload触发之前发生。所以,你的陈述并不完全正确。谢谢你的意见。这是一个web应用程序,我们需要在其中警告最终用户,并允许用户取消重新加载/页面退出。我们在onbeforeunload事件中使用return语句来提示用户取消离开页面。然而,我很困惑,为什么重新加载的行为不同于单击页面上的链接离开。考虑到您所说的以及我在页面重新加载上所观察到的,我可以简单地将onunload事件留给清理工作,而不是实际设置任何有价值的内容。谢谢您的输入。这是一个web应用程序,我们需要在其中警告最终用户,并允许用户取消重新加载/页面退出。我们在onbeforeunload事件中使用return语句来提示用户取消离开页面。然而,我很困惑,为什么重新加载的行为不同于单击页面上的链接离开。考虑到您所说的以及我在页面重新加载上所观察到的,我可以简单地将onunload事件留给清理工作,而不是实际执行