h5 storage事件监听

场景

因项目需求,遇到了需要在两个窗口的页面利用 localStorage 同步传值

如:

  • a b窗口同时打开了一个页面,此时点击a窗口的按钮 提交了事件改变了localstorage ,在b窗口的某一个值也需要同步改变

分析:

引用《h5移动web开发指南》上的话:

当同源页面的某个页面修改了localStorage,其余的同源页面只要注册了 storage 事件,就会触发

所以,localStorage的例子运行需要如下条件:

  • 同一浏览器打开了两个同源页面
  • 其中一个网页修改了localStorage
  • 另一网页注册了storage事件

*注意:在同一个网页修改本地存储,又在同一个网页监听,这样是没有效果的。

例子:

网页A:监听了storage事件:

window.addEventListener("storage", function (e) {  
    console.log(e.newValue);
})复制代码

网页B:修改了 storage 事件:

localStorage.setItem("test", "1234");复制代码

此时,在网页A的storage会被触发,从而拿到值

*注意:两个网页必须同源才有效,而且不能为同一个页面

扩展:

如果非得要在同一网页监听怎么办?可以重写localStorage的方法,抛出自定义事件:

// 保留一份原来的 setItem 方法
let orignalSetItem = localStorage.setItem;
// 重写 setItem 方法,加入自定义事件
localStorage.setItem = function (key, value) {  
    var setItemEvent = new Event("setItemEvent");  
    setItemEvent.value = value;  
    setItemEvent.key = key;  
    window.dispatchEvent(setItemEvent);  
    orignalSetItem.apply(this, arguments);
}
window.addEventListener("setItemEvent", function (e) {  
    console.log(e.key); // test
    consloe.log(e.value); // 1234
});
localStorage.setItem("test", "1234");
复制代码


转载于:https://juejin.im/post/5c2f23f151882525db141e84

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值