监听浏览器革新及封闭

需求背景: 为保证‘高度安全性’,用户每次退出页面或浏览器都要消灭上岸信息,每次进入体系都要从新上岸(每次上岸还要手机考证码等杂乱无章的考证信息,,,求用户的内心暗影面积),然则革新页面不能够消灭上岸信息。

处理思绪: javascript 关于浏览器的封闭和革新会触发两个事宜
onbeforeunload()
onunload(),问题在于怎样辨别用户是想革新照样退出(此时应当将用户催眠,然后取得用户的头脑,预判用户走位及操纵。。。),本文重要纪录这两个要领的区分,装备兼容性及怎样催眠用户(开顽笑的),是怎样辨别革新和退出浏览器

onbeforeunload()和onunload()

onbeforeunload 和 onunload 都是在页面革新或退出时触发的事宜

用法:

事宜用法
onunloadwindow.onunload=function(){SomeJavaScriptCode};
onbeforeunloadwindow.onbeforeunload=function(){SomeJavaScriptCode};

区分:

  1. unbeforeunload()是在页面革新或封闭之前触发的事宜,而onubload()是在页面革新或封闭以后才会触发的。
  2. unbeforeunload()事宜实行的递次在onunload()事宜之前发作。
  3. unbeforeunload()事宜能够制止onunload()事宜的触发。
  4. onunload()事宜是没法阻挠页面封闭的。

兼容性(pc):

事宜ChromeFirefoxIEOperaSafari
onunloadyesyesyesyesyes
onbeforeunload114123

注重:onbeforeunoad 在挪动端基础都不兼容,onunload则兼容大部分主流挪动端浏览器

参考文献:

MDN:
window.onbeforeunload

MDN:
window.onunload

辨别革新和退出

在浏览器封闭前是没法推断用户是革新照样退出,所以我们在用户再次翻开的时刻来推断用户是不是革新

处理思绪:

  1. 用户封闭浏览器时,纪录当前时候,并存于浏览器缓存中
  2. 用户再次翻开页面时,猎取上次退出的时候,并于当前时候举行比较,若小于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());
}
    原文作者:张吉成
    原文地址: https://segmentfault.com/a/1190000019305127
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞