1. 程式人生 > >利用localStorage事件來跨標簽頁共享sessionStorage

利用localStorage事件來跨標簽頁共享sessionStorage

sessions code oba dev rda locals 有效 lis html5

//幹貨 利用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()); },

利用localStorage事件來跨標簽頁共享sessionStorage