2016-11-10 1364 views

回答

7

@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工作。

+0

是的,你是完全正确的,因为这是根据[文档](https://developer.mozilla.org/en-US/docs/Web/API/Navigator/sendBeacon)的实验性方法,并且只能在最新的浏览器中使用,例如铬v39。 –

+0

纠正我,如果我错了,但保留存取甚至没有在Chrome中实现。 https://groups.google.com/a/chromium.org/forum/#!topic/loading-dev/_F6oicQ3_F4 –

0

在搜索这个问题的答案后,我发现用导航器传递标题需要传递一个blob对象。

例如

var hearders = {type : 'application/json'}; 
var blob = new blob(request , headers); 
navigator.sendBeacon('url/to/send',blob); 

感谢。

+0

您的意思是利用'新blob'因此,这将是'新的Blob'? –

+0

什么是'请求'?你能否引用你的任何消息来源? –

+0

我所说的请求是一个需要在浏览器关闭时发送的票据数据列表,以及服务器可以将其作为授权请求识别出来。 –

0

作为写入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