1visibilitychange事件触发条件:visibilitychange事件在浏览器选项卡隐藏或显示时触发。使用场景:当tab显示或隐藏时,触发一些业务逻辑document.addEventListener("visibilitychange",function(){console.log(document.visibilityState);});2存储事件触发条件:使用localStorage或sessionStorage来存储或修改一个本地存储的使用场景:tab之间通信//AB页同源//A页window.addEventListener('storage',(e)=>{console.log(e)})//B页,makeacallto120localStorage.setItem('makeCall','120')//然后页面A之间有输出,可以看出页面A已经收到了页面B的通知...key:"makeCall",oldValue:"119",newValue:"120",...3beforeunload事件触发条件:页面资源即将卸载时(刷新或关闭标签页前)。当页面仍然可见,且事件可以取消时仅使用场景:关闭或刷新页面时弹窗确认,关闭页面时向后台发送报告等。window.addEventListener("beforeunload",function(e){varconfirmationMessage="\o/";e.returnValue=confirmationMessage;//Gecko,Trident,Chrome34+returnconfirmationMessage;//Gecko,WebKit,Chrome<34});4navigator.sendBeacon该方法主要用于满足统计和诊断代码的需要,它通常在卸载(unloading)文档之前尝试向web服务器发送数据。过早发送数据会导致错失收集数据的机会。但是,开发人员很难确保在文档卸载期间发送数据。因为用户代理通常会忽略在卸载事件处理程序中发出的异步XMLHttpRequest。使用sendBeacon()方法会导致用户代理一有机会就异步向服务器发送数据,而不会延迟页面的卸载或影响下一次导航的加载性能。这解决了提交分析数据时的所有问题:使其可靠、异步且不影响下一页加载。另外,代码实际上比其他技术更简单!注意:该方法在IE和safari中没有实现使用场景:sendcrashreportwindow.addEventListener('unload',logData,false);functionlogData(){navigator.sendBeacon("/log",analyticsData);}
