摘要:解決思路對于瀏覽器的關(guān)閉和刷新會觸發(fā)兩個事件和,問題在于如何區(qū)分用戶是想刷新還是退出此時應(yīng)該將用戶催眠,然后獲得用戶的思想,預(yù)判用戶走位及操作。。。事件是無法阻止頁面關(guān)閉的。
需求背景: 為保證‘高度安全性’,用戶每次退出頁面或瀏覽器都要清除登陸信息,每次進(jìn)入系統(tǒng)都要重新登陸(每次登陸還要手機(jī)驗證碼等亂七八糟的驗證信息,,,求用戶的心里陰影面積),但是刷新頁面不可以清除登陸信息。onbeforeunload()和onunload()
解決思路: javascript 對于瀏覽器的關(guān)閉和刷新會觸發(fā)兩個事件 onbeforeunload()和onunload(),問題在于如何區(qū)分用戶是想刷新還是退出(此時應(yīng)該將用戶催眠,然后獲得用戶的思想,預(yù)判用戶走位及操作。。。),本文主要記錄這兩個方法的區(qū)別,設(shè)備兼容性及如何催眠用戶(開玩笑的),是如何區(qū)分刷新和退出瀏覽器
onbeforeunload 和 onunload 都是在頁面刷新或退出時觸發(fā)的事件
用法:
事件 | 用法 |
---|---|
onunload | window.onunload=function(){SomeJavaScriptCode}; |
onbeforeunload | window.onbeforeunload=function(){SomeJavaScriptCode}; |
區(qū)別:
unbeforeunload()是在頁面刷新或關(guān)閉之前觸發(fā)的事件,而onubload()是在頁面刷新或關(guān)閉之后才會觸發(fā)的。
unbeforeunload()事件執(zhí)行的順序在onunload()事件之前發(fā)生。
unbeforeunload()事件可以禁止onunload()事件的觸發(fā)。
onunload()事件是無法阻止頁面關(guān)閉的。
兼容性(pc):
事件 | Chrome | Firefox | IE | Opera | Safari |
---|---|---|---|---|---|
onunload | yes | yes | yes | yes | yes |
onbeforeunload | 1 | 1 | 4 | 12 | 3 |
注意:onbeforeunoad 在移動端基本都不兼容,onunload則兼容大部分主流移動端瀏覽器
參考文獻(xiàn):區(qū)分刷新和退出
MDN: window.onbeforeunload
MDN: window.onunload
在瀏覽器關(guān)閉前是無法判斷用戶是刷新還是退出,所以我們在用戶再次打開的時候來判斷用戶是否刷新
解決思路:
用戶關(guān)閉瀏覽器時,記錄當(dāng)前時間,并存于瀏覽器緩存中
用戶再次打開頁面時,獲取上次退出的時間,并于當(dāng)前時間進(jìn)行比較,若小于5s則表示用戶執(zhí)行的是刷新操作,若大于5s則判定為退出
注意: 5s并非固定,要根據(jù)實際情況調(diào)整
上代碼:
// 進(jìn)入頁面執(zhí)行 // 記錄當(dāng)前時間并轉(zhuǎn)成時間戳 const now = new Date().getTime(); // 從緩存中獲取用戶上次退出的時間戳 const leaveTime = parseInt(localStorage.getItem("leaveTime"), 10); // 判斷是否為刷新,兩次間隔在5s內(nèi)判定為刷新操作 const refresh = (now - leaveTime) <= 5000; // 測試alert alert(refresh ? "刷新" : "重新登陸"); // 退出當(dāng)前頁面執(zhí)行 window.onunload = function(e){ // ios 不支持 window.onbeforeunload() // 將退出時間存于localstorage中 localStorage.setItem("leaveTime", new Date().getTime()); }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/109876.html
摘要:完整中文版指南及視頻教程在從零到壹全棧部落。當(dāng)頁面重新刷新或者關(guān)閉之前,執(zhí)行清除頁面的緩存。慎用,尤其在生產(chǎn)環(huán)境中。 Day15 - LocalStorage (Node+Vue+微信公眾號開發(fā))企業(yè)級產(chǎn)品全棧開發(fā)速成周末班首期班(10.28號正式開班,歡迎搶座) 作者:?黎躍春-追時間的人 簡介:JavaScript30 是 Wes Bos 推出的一個 30 天挑戰(zhàn)。項目免費(fèi)提供了 ...
摘要:組件卸載生命周期路由跳轉(zhuǎn)和頁面關(guān)閉三者看起來有些類似的地方,比如都是當(dāng)前組件即將從視口消失,但實際上所觸發(fā)的事件均不相同。至此已經(jīng)實現(xiàn)了路由跳轉(zhuǎn)時提醒用戶進(jìn)行保存的功能。 React組件卸載生命周期、路由跳轉(zhuǎn)和頁面關(guān)閉三者看起來有些類似的地方,比如都是當(dāng)前組件即將從視口消失,但實際上所觸發(fā)的事件均不相同。以一個實際案例出發(fā): 某單頁應(yīng)用的文章編輯頁用戶正在編輯文章,此時尚未保存。當(dāng)用戶...
摘要:原文地址初衷如今移動端站點越來越多,滾動到底部加載數(shù)據(jù)和下拉刷新的需求非常的常見,即使現(xiàn)在很多站點也會有這樣的需求,比如百度首頁就有。 原文地址 https://github.com/fa-ge/Scrollload/blob/master/README.md 初衷 如今移動端站點越來越多,滾動到底部加載數(shù)據(jù)和下拉刷新的需求非常的常見,即使現(xiàn)在很多pc站點也會有這樣的需求,比如百度首頁...
摘要:背景有一個任務(wù)非常耗時會消耗后臺大量算力,所以在退出頁面的時候,要求前端這邊發(fā)送一個請求來殺死任務(wù)。小結(jié)本文總共講了三個,和,這個估計知道的人比較少,以后遇到前端埋點和頁面卸載前發(fā)送請求的需求,記得使用這三個。 背景: 有一個任務(wù)非常耗時會消耗后臺大量算力,所以在退出頁面的時候,要求前端這邊發(fā)送一個請求來殺死任務(wù)。 一開始以為這個需求非常簡單,就是在進(jìn)入其他路由前,發(fā)送一下請求,殺死一...
閱讀 2749·2021-10-09 09:44
閱讀 3557·2019-08-30 15:54
閱讀 2168·2019-08-30 14:16
閱讀 2801·2019-08-30 13:09
閱讀 831·2019-08-30 13:08
閱讀 1291·2019-08-29 16:29
閱讀 1678·2019-08-26 13:57
閱讀 1934·2019-08-26 13:53