触发条件:浏览器标签页被隐藏或显示的时候会触发visibilitychange事件.
web
使用场景:当标签页显示或者隐藏时,触发一些业务逻辑
后端
document.addEventListener("visibilitychange", function() { console.log( document.visibilityState ); });
触发条件:使用localStorage or sessionStorage存储或者修改某个本地存储时
浏览器
使用场景:标签页间通讯
服务器
// AB页面同源 // 在A 页面 window.addEventListener('storage', (e) => {console.log(e)}) // 在B 页面,向120打个电话 localStorage.setItem('makeCall','120') // 而后能够在A页面间有输出, 能够看出A页面 收到了B页面的通知 ...key: "makeCall", oldValue: "119", newValue: "120", ...
触发条件:当页面的资源将要卸载(及刷新或者关闭标签页前). 当页面依然可见,而且该事件能够被取消只时
session
使用场景:关闭或者刷新页面时弹窗确认
,关闭页面时向后端发送报告等
异步
window.addEventListener("beforeunload", function (e) { var confirmationMessage = "\o/"; e.returnValue = confirmationMessage; // Gecko, Trident, Chrome 34+ return confirmationMessage; // Gecko, WebKit, Chrome <34 });
这个方法主要用于知足 统计和诊断代码 的须要,这些代码一般尝试在卸载(unload)文档以前向web服务器发送数据。过早的发送数据可能致使错过收集数据的机会。然而, 对于开发者来讲保证在文档卸载期间发送数据一直是一个困难。由于用户代理一般会忽略在卸载事件处理器中产生的异步 XMLHttpRequest 。ide
使用 sendBeacon() 方法,将会使用户代理在有机会时异步地向服务器发送数据,同时不会延迟页面的卸载或影响下一导航的载入性能。这就解决了提交分析数据时的全部的问题:使它可靠,异步而且不会影响下一页面的加载。此外,代码实际上还要比其余技术简单!性能
注意:该方法在IE和safari没有实现
代理
使用场景:发送崩溃报告
code
window.addEventListener('unload', logData, false); function logData() { navigator.sendBeacon("/log", analyticsData); }