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