Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.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 onbeforeunload在关闭选项卡但不关闭浏览器时执行_Javascript_Ajax - Fatal编程技术网

JavaScript onbeforeunload在关闭选项卡但不关闭浏览器时执行

JavaScript onbeforeunload在关闭选项卡但不关闭浏览器时执行,javascript,ajax,Javascript,Ajax,我们有一个网站有一个奇怪的问题,至少根据我对onbeforeunload方法的理解。基本上,当用户离开页面时,无论是通过离开页面、关闭选项卡还是关闭浏览器,都需要进行AJAX调用以释放锁 方法非常简单: window.onbeforeunload=函数(e){ $.ajax({…}); } (AJAX调用是同步完成的) 我们已经测试了这段代码,发现如果用户关闭了特定的选项卡(当有多个选项卡打开时),AJAX调用工作得非常好。但是,如果关闭了整个浏览器,则onbeforeunload功能中的代码

我们有一个网站有一个奇怪的问题,至少根据我对
onbeforeunload
方法的理解。基本上,当用户离开页面时,无论是通过离开页面、关闭选项卡还是关闭浏览器,都需要进行AJAX调用以释放锁

方法非常简单:

window.onbeforeunload=函数(e){
$.ajax({…});
}
(AJAX调用是同步完成的)

我们已经测试了这段代码,发现如果用户关闭了特定的选项卡(当有多个选项卡打开时),AJAX调用工作得非常好。但是,如果关闭了整个浏览器,则
onbeforeunload
功能中的代码将无法按预期工作(即页面锁定仍然存在)。我们已经在Chrome和Edge中测试了这一点,在这两款浏览器中都发生了同样的事情

我的理解是,
onbeforeunload
应该在页面导航离开时触发(即单击链接、关闭选项卡或关闭浏览器)。我知道需要至少与页面交互一次有一个警告,这确实发生了。我通过编辑页面上的项目对其进行了测试,但问题仍然存在


有人能解释为什么会发生这种情况吗?如果选项卡关闭,但浏览器保持打开状态,但如果浏览器关闭,则一切正常。提前感谢您提供的任何信息/指导。

注意:为了避免出现不必要的弹出窗口,某些浏览器不显示在beforeunload事件处理程序中创建的提示,除非已与页面交互。此外,有些根本不显示它们。页面上是否有任何交互?是的,有。如果选项卡本身已关闭,则一切正常。但是,如果我用完全相同的方法来做每件事,而不是关闭选项卡,而是关闭整个浏览器,那么它就会失败。唯一不同的是关闭浏览器本身与关闭选项卡。如果用户的计算机从网络中消失(计算机进入待机状态、浏览器崩溃、计算机崩溃、断电等),您如何释放锁?我们有一项服务,将在这种情况下的指定时间后释放锁。然而,似乎一位同事已经解决了这个问题。我不知道他做了什么,我正在努力找出答案。如果我这样做了,我会为其他可能经历过这种情况的人更新帖子。