首先感謝這位大佬的帖子 https://www.cnblogs.com/miam/p/11387779.html
開始本地測試驗證
思路
1):首次打開頁面執行onload方法,如果第一次打開,localTime,sesTime,numbers都沒有值,執行第一個If語句,清除localStorage和sessionStorage的值,重新給localTime,sesTime賦值,numbers++,此時numbers=0。
2):刷新頁面先執行onbeforeunload 方法,當前localTime,sesTime有值且相等,numbers--,此時numbers=0;然後再執行onload方法。此時localTime,sesTime有值,numbers++,此時numbers=1;
3):再次打開新的標籤頁,執行onload方法,此時localTime有值並且numbers=1,執行第二個if語句,給sesTime賦值。numbers++,此時numbers=2;
`// 刷新頁面時,首先進入onbeforeunload 方法 window.onbeforeunload = () => {
let numbers = window.localStorage.getItem('numbers');
const sesTime = window.sessionStorage.getItem('sesTime');
const localTime = window.localStorage.getItem('localTime');
// 當localTime 沒有值,並且sesTime === localTime,減去當前頁。
if (localTime !== 'NaN' && localTime !== null && sesTime === localTime) {
numbers = parseInt(numbers) - 1;
window.localStorage.setItem('numbers', numbers)
// 退出登錄
// eslint-disable-next-line no-underscore-dangle
window.g_app._store.dispatch({
type: 'login/logout',
});
}
};
window.onload = () => {
let time = ''; // 計算打開的標籤頁數量 let numbers = window.localStorage.getItem('numbers');
const sesTime = window.sessionStorage.getItem('sesTime'); // 首次登錄的時間 const localTime = window.localStorage.getItem('localTime');
// 當numbers無值或者小於0時,爲numbers 賦值0
if (numbers === 'NaN' || numbers === null || parseInt(numbers) < 0) {
numbers = 0;
}
// sesTime || localTime 沒有值,並且numbers爲0時,清除localStorage裏的登錄狀態,退出到登錄頁面
if ((sesTime === null || sesTime === 'NaN' || localTime === null ||
localTime === 'NaN') && parseInt(numbers) === 0) {
localStorage.clear();
sessionStorage.clear();
// 爲localTime和sesTime賦值,記錄第一個標籤頁的時間
time = new Date().getTime();
window.sessionStorage.setItem('sesTime', time);
window.localStorage.setItem('localTime', time);
}
// 當time ,localTime 有值,並且sesTime != localTime時,爲sesTime賦值
if (!time && localTime != 'NaN' && localTime != null && sesTime != localTime) {
window.sessionStorage.setItem('sesTime', localTime);
}
// 最後保存當前是第幾個標籤頁
numbers = parseInt(numbers) + 1;
window.localStorage.setItem('numbers', numbers);
};`