//乾貨 利用localStorage事件來跨標籤頁共享sessionStorage //由於cookie保存字節數量有限,不少童鞋考慮用html5 storage來保存臨時數據,Sessionstorage就比較適合來保存臨時數據了。 //但有個問題呵:Sessionstorage:不支持跨標籤頁共享數據,就是說Sessionstorage只在同一個頁面內有效,即便同一域名,新打開一個tab窗口,也是不能共享Sessionstorage的。 //那麼有沒有辦法呢,那是有的.... //原理是運用了EventListener的特性 //同源的網頁A和B,A頁面監聽了storage事件,B頁面修改localStorage時,A頁面纔會觸發該事件;而A頁面作出修改,一樣B頁面觸發了事件 // 下面 EventListener 沒對ie做支持,童鞋自行補充 shareSessionStorage: function(){ if(!window.webConfig.useStorage || !window.sessionStorage){ return; } // console.log("useStorage:", webConfig.useStorage); // 該事件是核心 var handel = function(event){ // console.log("event==>", event.key); if(event.key =='getSessionStorage') { var userData = window.sessionStorage.getItem("UserData"); var sessionData = { "UserData": userData }; // 已存在的標籤頁會收到這個事件 window.localStorage.setItem('sessionStorage', JSON.stringify(sessionData)); window.localStorage.removeItem('sessionStorage'); } else if(event.key =='sessionStorage') { // 新開啓的標籤頁會收到這個事件 var data =JSON.parse(event.newValue); // console.log("event==>", event.newValue); for (var key in data) { window.sessionStorage.setItem(key, data[key]); } } }; window.removeEventListener("storage", handel); window.addEventListener("storage", handel); // 這個調用能觸發目標Global.js storage事件,從而達到共享數據的目的 window.localStorage.setItem('getSessionStorage', Date.now()); },