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

//乾貨 利用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());
},
相關文章
相關標籤/搜索