窗口关闭时发送通知

Zav*_*vec 3 javascript xmlhttprequest

我有一个网络应用程序,我试图在窗口关闭时向服务器发送通知。到目前为止,我发现的最好方法是在 onunload 中使用同步 xhr (因为异步不可靠)。这是目前的代码:

    window.onunload = function() {
      var req = new XMLHttpRequest();
      req.open('GET', '/api/v1/' + id + '/close?resource=' + JSON.stringify(resource), false);
      req.setRequestHeader('Authorization', localStorage.token);
      req.send();
    }
Run Code Online (Sandbox Code Playgroud)

唯一的问题是当他们重新加载页面时,页面会冻结一点(我认为这是由于 xhr)。有没有更好的方法在窗口关闭时向服务器发送通知?

woj*_*ekk 6

我认为更好的解决方案是使用Navigator.sendBeacon新浏览器 - Chrome、Opera 和 Firefox - 因为是异步的,并且浏览器向您承诺将发送请求。

此方法满足了分析和诊断代码的需求,这些代码通常会在卸载文档之前尝试将数据发送到 Web 服务器。

您可以在这里找到更多内容:https ://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon

Polyfill: https: //github.com/miguelmota/Navigator.sendBeacon