1、页面正常关闭,如何通知 A 页面
页面正常关闭时,会先执行 window.onbeforeunload ,然后执行 window.onunload。
2、页面意外崩溃,又该如何通知 A 页面
利用 window 对象的 load 和 beforeunload 事件,通过心跳监控来获取 B 页面的崩溃。
window.addEventListener(\'load\', function () { sessionStorage.setItem(\'good_exit\', \'pending\'); setInterval(function () { sessionStorage.setItem(\'time_before_crash\', new Date().toString()); }, 1000); }); window.addEventListener(\'beforeunload\', function () { sessionStorage.setItem(\'good_exit\', \'true\'); }); if(sessionStorage.getItem(\'good_exit\') && sessionStorage.getItem(\'good_exit\') !== \'true\') { /* insert crash logging code here */ alert(\'Hey, welcome back from your crash, looks like you crashed on: \' + sessionStorage.getItem(\'time_before_crash\')); }
在页面加载时(load 事件)在 sessionStorage 记录 good_exit 状态为 pending,如果用户正常退出(beforeunload 事件)状态改为 true,如果 crash 了,状态依然为 pending,在用户第2次访问网页的时候(第2个load事件),查看 good_exit 的状态,如果仍然是 pending 就是可以断定上次访问网页崩溃了!
但有一个问题,本例中用 sessionStorage 保存状态,在用户关闭了B页面,sessionStorage 值就会丢失,所以换种方式,使用 localStorage 来实现。