前提:sessionStorage瀏覽器的tab頁切換的時候,是不共享的
原理:window的storage事件(H5),localStorage的tab頁是可以共享的
為什么不用localStorage:因為localStorage在關閉瀏覽器后重新打開,還會存在,不符合需求
(function() { //這里面的token是你存在sessionStorage里面的用戶標識的key值 if (!sessionStorage.length) { // 這個調用能觸發目標事件,從而達到共享數據的目的 localStorage.setItem('token', Date.now()); }; // 該事件是核心 window.addEventListener('storage', function(event) { if (event.key == 'token') { // 已存在的標簽頁會收到這個事件 localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage)); localStorage.removeItem('sessionStorage'); } else if (event.key == 'sessionStorage' && !sessionStorage.length) { // 新開啟的標簽頁會收到這個事件 var data = JSON.parse(event.newValue), value; for (let key in data) { sessionStorage.setItem(key, data[key]); } } //可以在這里寫你是否要免登錄的邏輯 }); })();
storage事件:打開多個同源頁面(tab頁)的時候,更改sessionstorage和localstorage的時候出發(同一個頁面進行的更改不會觸發事件)
event.key 本頁面的storage的所有key值。
event.newValue 本頁面進行的localStorage.setItem行為的時候,新增tab頁鏈接到你的頁面獲得的新的key值的value:即:localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));行為的sessionStorage被新頁面捕捉到
