在窗口关闭时发送通知

时间:2015-05-29 20:31:07

标签: javascript xmlhttprequest

我有一个Web应用程序,我在窗口关闭时尝试向服务器发送通知。到目前为止,我发现的最好方法是在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();
    }

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

2 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

您正在寻找beforeunload事件。 unload事件实际发生在用户返回页面时(因为当网页关闭时,事件无法触发,也不会在关闭标签之前触发,因为文档尚未卸载)

另外一个有用的提示是以URL兼容格式对JSON进行编码:encodeURIComponent(JSON.stringify(resource))

见这里:https://developer.mozilla.org/en-US/docs/Web/Events/beforeunload

相关问题