Javascript 需要在navigator.sendbeacon()中进行授权
我的问题是,当我调用侦听onBeforeUnload()事件的函数时,我想发布数据。问题是我的请求未经授权。我需要在某处添加我的承载者,但我不知道如何添加 这里是我的实际代码:Javascript 需要在navigator.sendbeacon()中进行授权,javascript,angular,typescript,Javascript,Angular,Typescript,我的问题是,当我调用侦听onBeforeUnload()事件的函数时,我想发布数据。问题是我的请求未经授权。我需要在某处添加我的承载者,但我不知道如何添加 这里是我的实际代码: @HostListener('window:beforeunload', ['$event']) onBeforeUnload(): void { navigator.sendbeacon(`${localhost:8080/apiRest}`, infoIWantToSent); } 现在,请求发送
@HostListener('window:beforeunload', ['$event'])
onBeforeUnload(): void {
navigator.sendbeacon(`${localhost:8080/apiRest}`, infoIWantToSent);
}
现在,请求发送一个401:unautomatized,这是正常的,因为我不发送任何承载。试试这个:
let headers = {
Authorization: 'Bearer ' + token
};
let blob = new Blob([JSON.stringify(infoIWantToSent)], headers);
navigator.sendBeacon('url', blob);
我发现这个解决方案:
@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()
它几乎适用于所有情况,但当我关闭包含我的页面的iframe时就不行了。谢谢您的回复。不幸的是,我在使用您的方法编译时遇到了这个错误:错误TS2559:Type“{Authorization:string;}”与Type“BlobPropertyBag”没有共同的属性。我试图添加一个类型,例如`const headers={type:'application/json',Authorization:'Bearer'+this.getUser().token};```但它也不起作用。我会说它包含了'type:'application/json',,但既然您已经尝试过了,我就没有更多的输入了。很抱歉一旦你破解了,请告诉我解决方案。祝你一切顺利