6

我一直在尝试发送信标beforeunload,它似乎适用于几乎所有现代浏览器,除了处于隐身模式的 Chrome。

这是适用于所有现代浏览器的代码,除了处于隐身模式的 Chrome:

window.onbeforeunload = function() {
    navigator.sendBeacon("url");
}

甚至这段代码似乎也不起作用:

window.onbeforeunload = function() { 
    console.log('before unload') 
}

我做错了什么还是只是 Chrome 的错?

4

1 回答 1

0

你的设置是什么(所以,Chrome 版本)?

在 Chrome 80.0.3987.116 / Ubuntu 64 和 Chrome 79.0.3945.130 / Windows 10 上,以下代码段可以正常工作:

window.addEventListener('beforeunload', (event) => {
  console.log("BEFORE")
  navigator.sendBeacon("http://www.google.it");
  // Cancel the event as stated by the standard.
  event.preventDefault();
  // Chrome requires returnValue to be set.
  event.returnValue = '';
});

beforeunload 发送的请求屏幕(隐身模式):

在此处输入图像描述 此外,请注意:

为了对抗不需要的弹出窗口,一些浏览器不显示在 beforeunload 事件处理程序中创建的提示,除非页面已经被交互。此外,有些根本不显示它们。

参考:https ://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload

于 2020-02-24T13:17:53.137 回答