需要在navigator.sendbeacon()

时间:2019-05-14 13:44:33

标签: javascript angular typescript

我的问题是,当我调用一个函数监听事件onBeforeUnload()时,我想发布数据。问题是我的请求未经授权。我需要将承载添加到某个地方,但是我不知道如何。

这是我的实际代码:

@HostListener('window:beforeunload', ['$event'])
  onBeforeUnload(): void {
     navigator.sendbeacon(`${localhost:8080/apiRest}`, infoIWantToSent);
  }

目前,该请求发送的是401:unhautorized,这很正常,因为我没有传输任何承载。

2 个答案:

答案 0 :(得分:0)

尝试一下:

  let headers = {
    Authorization: 'Bearer ' + token
  };
  let blob = new Blob([JSON.stringify(infoIWantToSent)], headers);
  navigator.sendBeacon('url', blob);

答案 1 :(得分:0)

我找到了这个解决方案:

@HostListener('window:beforeunload', ['$event'])
  onBeforeUnload(): void {
   fetch('url', {
        keepalive: true,
        method: 'POST',
        headers: {
          'Content-Type': 'application/json',
          'Authorization': `Bearer ${token}`,
        },
        body: JSON.stringify(infoIWantToSent),
      });
}

显然,如果必须使用令牌连接,则不能使用navigator.sendbeacon()https://w3c.github.io/beacon/#sec-sendBeacon-method 它适用于几乎所有情况,但是当我关闭包含我的页面的iframe时无效。