@@ -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) {
778778window .addEventListener (' unload' , logData, false );
779779
780780function 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
788790navigator .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