@@ -743,7 +743,7 @@ window.addEventListener('unload', function(event) {
743
743
744
744
上面代码中,强制执行了一次双重循环,拖长了` unload ` 事件的执行时间,导致异步 AJAX 能够发送成功。
745
745
746
- 类似的还可以使用` setTimeout ` 。下面是追踪用户点击的例子。
746
+ 类似的还可以使用` setTimeout() ` 。下面是追踪用户点击的例子。
747
747
748
748
``` javascript
749
749
// HTML 代码如下
@@ -768,7 +768,7 @@ theLink.addEventListener('click', function (event) {
768
768
});
769
769
```
770
770
771
- 上面代码使用` setTimeout ` ,拖延了350毫秒,才让页面跳转,因此使得异步 AJAX 有时间发出。
771
+ 上面代码使用` setTimeout() ` ,拖延了350毫秒,才让页面跳转,因此使得异步 AJAX 有时间发出。
772
772
773
773
这些做法的共同问题是,卸载的时间被硬生生拖长了,后面页面的加载被推迟了,用户体验不好。
774
774
@@ -778,11 +778,13 @@ theLink.addEventListener('click', function (event) {
778
778
window .addEventListener (' unload' , logData, false );
779
779
780
780
function logData () {
781
- navigator .sendBeacon (' /log' , analyticsData);
781
+ navigator .sendBeacon (' /log' , JSON .stringify ({
782
+ some: " data"
783
+ }));
782
784
}
783
785
```
784
786
785
- ` Navigator.sendBeacon ` 方法接受两个参数,第一个参数是目标服务器的 URL,第二个参数是所要发送的数据(可选),可以是任意类型(字符串、表单对象、二进制对象等等)。
787
+ ` Navigator.sendBeacon() ` 方法接受两个参数,第一个参数是目标服务器的 URL,第二个参数是所要发送的数据(可选),可以是任意类型(字符串、表单对象、二进制对象等等)。
786
788
787
789
``` javascript
788
790
navigator .sendBeacon (url, data)
@@ -806,3 +808,16 @@ function analytics(state) {
806
808
navigator .sendBeacon (URL , data);
807
809
}
808
810
```
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