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
,否则这将不起作用。很遗憾,这不是我想要的。这里: