需求背景: 为保证‘高度安全性’,用户每次退出页面或浏览器都要消灭上岸信息,每次进入体系都要从新上岸(每次上岸还要手机考证码等杂乱无章的考证信息,,,求用户的内心暗影面积),然则革新页面不能够消灭上岸信息。
处理思绪: javascript 关于浏览器的封闭和革新会触发两个事宜
onbeforeunload()
和
onunload()
,问题在于怎样辨别用户是想革新照样退出(此时应当将用户催眠,然后取得用户的头脑,预判用户走位及操纵。。。),本文重要纪录这两个要领的区分,装备兼容性及怎样催眠用户(开顽笑的),是怎样辨别革新和退出浏览器
onbeforeunload()和onunload()
onbeforeunload 和 onunload 都是在页面革新或退出时触发的事宜
用法:
事宜 | 用法 |
---|---|
onunload | window.onunload=function(){SomeJavaScriptCode}; |
onbeforeunload | window.onbeforeunload=function(){SomeJavaScriptCode}; |
区分:
-
unbeforeunload()
是在页面革新或封闭之前触发的事宜,而onubload()
是在页面革新或封闭以后才会触发的。 -
unbeforeunload()
事宜实行的递次在onunload()
事宜之前发作。 -
unbeforeunload()
事宜能够制止onunload()
事宜的触发。 -
onunload()
事宜是没法阻挠页面封闭的。
兼容性(pc):
事宜 | Chrome | Firefox | IE | Opera | Safari |
---|---|---|---|---|---|
onunload | yes | yes | yes | yes | yes |
onbeforeunload | 1 | 1 | 4 | 12 | 3 |
注重:onbeforeunoad 在挪动端基础都不兼容,onunload则兼容大部分主流挪动端浏览器
参考文献:
MDN:
window.onunload
辨别革新和退出
在浏览器封闭前是没法推断用户是革新照样退出,所以我们在用户再次翻开的时刻来推断用户是不是革新
处理思绪:
- 用户封闭浏览器时,纪录当前时候,并存于浏览器缓存中
- 用户再次翻开页面时,猎取上次退出的时候,并于当前时候举行比较,若小于5s则示意用户实行的是革新操纵,若大于5s则判定为退出
注重: 5s并不是牢固,要根据实际情况调解
上代码:
// 进入页面实行
// 纪录当前时候并转成时候戳
const now = new Date().getTime();
// 从缓存中猎取用户上次退出的时候戳
const leaveTime = parseInt(localStorage.getItem('leaveTime'), 10);
// 推断是不是为革新,两次间隔在5s内判定为革新操纵
const refresh = (now - leaveTime) <= 5000;
// 测试alert
alert(refresh ? '革新' : '从新上岸');
// 退出当前页面实行
window.onunload = function(e){ // ios 不支持 window.onbeforeunload()
// 将退出时候存于localstorage中
localStorage.setItem('leaveTime', new Date().getTime());
}