前提:sessionStorage瀏覽器的tab頁切換的時候,是不共享的瀏覽器
原理:window的storage事件(H5),localStorage的tab頁是能夠共享的session
爲何不用localStorage:由於localStorage在關閉瀏覽器後從新打開,還會存在,不符合需求spa
(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的時候出發(同一個頁面進行的更改不會觸發事件)localstorage
event.key 本頁面的storage的全部key值。code
event.newValue 本頁面進行的localStorage.setItem行爲的時候,新增tab頁連接到你的頁面得到的新的key值的value:即:localStorage.setItem('sessionStorage', JSON.stringify(sessionStorage));行爲的sessionStorage被新頁面捕捉到blog