利用localStorage事件来跨标签页共享sessionStorage

本文介绍了一种利用localStorage事件实现跨标签页共享SessionStorage的方法。通过监听storage事件并在不同标签页间传递数据,解决了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());
},

 

转载于:https://www.cnblogs.com/hqb-blog/p/7280244.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值