![](/img/trans.png)
[英]window.onbeforeunload() is not working on Firefox browser close
[英]window.onbeforeunload, closing browser and synchronous AJAX
当同步AJAX有意义时,我一直在寻找这种情况的任何合理示例。 我发现了一个SO问题 ,作者在其中提到window.onbeforeunload
并声称,如果AJAX调用是异步的,则“请求永远不会停止”。
有人可以解释吗? 我的意思是-当用户想要关闭选项卡时会触发window.onbeforeunload
。 即使有人单击关闭了该标签,该怎么办才能使该标签仍然有效? 有人可以举更具体的例子吗?
他没有说要求永远不会停止 ; 他说永远不会完成 。 也就是说,您的代码没有希望再返回响应,因为执行环境(窗口)将在此之前消失。
当window.onbeforeunload
以真实值退出时,该选项卡将关闭。 因此,只要页面正在运行,页面就在等待返回值,而不是关闭。 这允许发送同步AJAX,并接收和处理响应。 如果请求是异步的,则代码构造XHR对象,然后退出,页面(和您的代码)消失。
我从未对此进行过测试,但应答者显然认为(并且我认为这是不合理的)页面可能停留的时间不够长,甚至无法发送异步XHR,更不用说接收响应了。 因此,如果要确保服务器收到用户已关闭页面的信息,则希望使请求同步。
即使有人单击关闭了该标签,该怎么办才能使该标签仍然有效? 有人可以举更具体的例子吗?
在卸载时发送同步XMLHttpRequest
是保证在用户代理卸载页面时传递会话数据的唯一方法(并且可能永远不会再次访问您的站点)。 有两种特定的情况:
信标规范 ( navigator.sendBeacon
)旨在优化此特定情况,从而即使在页面卸载后也可以发送保证仍然完成的异步请求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.