sendBeacon

navigator.sendBeacon(url, data); 如果浏览器成功的加入发送数据的队列,返回true,否则false;

这个方法强调的是分析和诊断代码,它们是在页面卸载前尝试向服务器发送数据的代码;发送数据的瞬间可能会错失收集数据的机会,但是对传统的开发者来说,在页面卸载前发送完数据是很难做到的,因为浏览器经常忽略unload处理函数中的异步请求(XMLHttpRequest)

为了解决这个问题,分析和诊断代码经常是在unload or beforeunload函数中使用同步的XMLHttpRequest请求来提交数据; 但是同步的XMLHttpRequest请求会阻碍文档的卸载,导致下一个页面加载缓慢。下一个页面什么也不做不了来避免页面加载缓慢的问题,因为问题是前一个页面引起的;

也有一些其他的方案来保证数据提交;其中一个是在unload事件中通过创建img,设置src提交数据;大部分的浏览器会延时卸载来保证图片加载完;另外一种方法是在unload事件中创建一个什么也不做的循环,延时卸载页面;

使用sendBeacon方法,如果浏览器有机会就会异步的发送数据到服务器,不用延时卸载页面;数据发送是可靠的;

和XHR相比,beacon请求会发送在这个方法被调用时所有相关的cookie.