Javascript onbeforeunload在Chrome上的工作方式与在Firefox上的不同。我正在寻找任何可能的替代品
我试图在我的代码中添加一个Javascript onbeforeunload在Chrome上的工作方式与在Firefox上的不同。我正在寻找任何可能的替代品,javascript,web,onbeforeunload,Javascript,Web,Onbeforeunload,我试图在我的代码中添加一个onbeforeuload,以便它触发一条发送到服务器的消息。我遇到了以下问题: 在页面刷新时,使用Firefox时会将消息发送到服务器。当我在Google Chrome上刷新页面时,它不会向服务器发送消息 当点击我的站点上的链接导航到不同的站点时,服务器仅在使用Chrome时才会收到消息。Firefox在单击外部链接时不发送消息 我还知道,当窗口关闭时,onbeforeuload应该可以工作,您可以进入另一个网站并导航到该网站。还有一些其他情况也会触发该功能。我的
onbeforeuload
,以便它触发一条发送到服务器的消息。我遇到了以下问题:
- 在页面刷新时,使用Firefox时会将消息发送到服务器。当我在Google Chrome上刷新页面时,它不会向服务器发送消息
- 当点击我的站点上的链接导航到不同的站点时,服务器仅在使用Chrome时才会收到消息。Firefox在单击外部链接时不发送消息
onbeforeuload
应该可以工作,您可以进入另一个网站并导航到该网站。还有一些其他情况也会触发该功能。我的网站无法处理上述任何错误
如果有解决办法?如果是,我能做什么?我四处寻找修复程序,但我只在提示用户是否要离开页面时得到修复,我不希望这样
此外,我尝试在我的外部链接中将函数调用添加到onclick
,但在Firefox上没有触发。我猜这是因为在取消之前,onbeforeunload
有一段时间。如果是的话,有办法解决吗
最后,如果使用onbeforeuload
无法实现这一点,那么在不提示用户是否要离开的情况下,我的其他选项是什么
提前谢谢
编辑:以下是一些可以使用的代码:
确保向服务器发送消息的代码是阻塞的,而不是异步的。如果
onbeforeunload
在发送邮件之前返回,则会出现未定义的行为,例如,如果在发送完成之前卸载页面,则可能无法发送邮件。只要unbeforeunload
返回,浏览器就会继续卸载。这需要一个文件,以便您可以为我们重现问题。@RandyCasburn我已经用它编辑了文章。以下是托管代码:@RandyCasburn基本上,一切都可以与JSFIDLE一起工作,但在使用Firefox或Chrome浏览器时就不行了。我该如何使用阻塞而不是异步函数呢?我目前正在使用fetch。我相信fetch是异步的,所以我需要做什么才能使它阻塞。我将代码放在了网上:,以防您想测试和更改它。我想您可以使用await
。不,await仍然是异步的-同样的结果也会发生。我将await
添加到函数中,但它仍然需要我添加return function()
来提示用户“离开页面”或“留在页面”。正如Randy Casburn所说,await
仍然是异步的,因此除非我在调用
时使用return
,否则这将不起作用。很遗憾,这不是我想要的。这里: