Skip to content

Commit ff16631

Browse files
committed
docs(bom/xmlhttprequest): edit Navigator.sendBeacon()
1 parent c073782 commit ff16631

File tree

1 file changed

+19
-4
lines changed

1 file changed

+19
-4
lines changed

docs/bom/xmlhttprequest.md

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -743,7 +743,7 @@ window.addEventListener('unload', function(event) {
743743

744744
上面代码中,强制执行了一次双重循环,拖长了`unload`事件的执行时间,导致异步 AJAX 能够发送成功。
745745

746-
类似的还可以使用`setTimeout`。下面是追踪用户点击的例子。
746+
类似的还可以使用`setTimeout()`。下面是追踪用户点击的例子。
747747

748748
```javascript
749749
// HTML 代码如下
@@ -768,7 +768,7 @@ theLink.addEventListener('click', function (event) {
768768
});
769769
```
770770

771-
上面代码使用`setTimeout`,拖延了350毫秒,才让页面跳转,因此使得异步 AJAX 有时间发出。
771+
上面代码使用`setTimeout()`,拖延了350毫秒,才让页面跳转,因此使得异步 AJAX 有时间发出。
772772

773773
这些做法的共同问题是,卸载的时间被硬生生拖长了,后面页面的加载被推迟了,用户体验不好。
774774

@@ -778,11 +778,13 @@ theLink.addEventListener('click', function (event) {
778778
window.addEventListener('unload', logData, false);
779779

780780
function logData() {
781-
navigator.sendBeacon('/log', analyticsData);
781+
navigator.sendBeacon('/log', JSON.stringify({
782+
some: "data"
783+
}));
782784
}
783785
```
784786

785-
`Navigator.sendBeacon`方法接受两个参数,第一个参数是目标服务器的 URL,第二个参数是所要发送的数据(可选),可以是任意类型(字符串、表单对象、二进制对象等等)。
787+
`Navigator.sendBeacon()`方法接受两个参数,第一个参数是目标服务器的 URL,第二个参数是所要发送的数据(可选),可以是任意类型(字符串、表单对象、二进制对象等等)。
786788

787789
```javascript
788790
navigator.sendBeacon(url, data)
@@ -806,3 +808,16 @@ function analytics(state) {
806808
navigator.sendBeacon(URL, data);
807809
}
808810
```
811+
812+
该方法不允许自定义 HTTP 标头,为了以“application/json”的形式发送数据,可以使用 Blob 对象。
813+
814+
```javascript
815+
const blob = new Blob(
816+
[ JSON.stringify({ some: "data" }) ],
817+
{ type: 'application/json; charset=UTF-8' }
818+
);
819+
navigator.sendBeacon('/log', blob));
820+
```
821+
822+
这个方法的优先级较低,不会占用页面资源。一般是在浏览器空闲的时候,才会发送。
823+

0 commit comments

Comments
 (0)