回答
@Vipul Panth有帮助的信息,但我想提供一些更完整的细节。
首先,请注意navigator.sendBeacon
在所有浏览器中都不受支持。有关此功能的更多详细信息以及当前支持的浏览器MDN documentation。
你确实创建了一个blob来提供标题。下面是一个例子:
window.onunload = function() {
let body = {
id,
email
};
let headers = {
type: 'application/json'
};
let blob = new Blob([JSON.stringify(body)], headers);
navigator.sendBeacon('url', blob);
});
navigator.sendBeacon
将发送设置为无论是在headers.type
在Content-Type请求标头的POST请求。这似乎是你可以在一个信标中设定虽然只有头,每W3C:
的sendBeacon方法不提供自定义请求的方法,提供自定义请求头,或更改请求等加工性质的能力和回应。需要此类请求的非默认设置的应用程序应该使用带有Keepalive标志的[FETCH] API设置为true。
我能够观察一些如何通过这个Chromium bug report工作。
在搜索这个问题的答案后,我发现用导航器传递标题需要传递一个blob对象。
例如
var hearders = {type : 'application/json'};
var blob = new blob(request , headers);
navigator.sendBeacon('url/to/send',blob);
感谢。
您的意思是利用'新blob'因此,这将是'新的Blob'? –
什么是'请求'?你能否引用你的任何消息来源? –
我所说的请求是一个需要在浏览器关闭时发送的票据数据列表,以及服务器可以将其作为授权请求识别出来。 –
作为写入Processing Model of sendBeacon:
提取对象的字节流(transmittedData)和内容类型(contentType中)。
如何进行提取described here
我已经收集是传输数据的内容类型被提取,它被设置为HTTP请求的内容类型。
1)如果发送Blob对象,则Content-Type变为Blob的类型。
2)如果一个FORMDATA对象发送,内容类型变为多部分/格式数据
3)如果一个URLSearchParams对象发送,内容类型变为应用程序/ x-WWW窗体-urlencoded
4)如果一个正常的字符串被发送,内容类型变为纯文本/
Javascript代码来实现不同的对象can be found here
是的,你是完全正确的,因为这是根据[文档](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon)的实验性方法,并且只能在最新的浏览器中使用,例如铬v39。 –
纠正我,如果我错了,但保留存取甚至没有在Chrome中实现。 https://groups.google.com/a/chromium.org/forum/#!topic/loading-dev/_F6oicQ3_F4 –