因项目需求,遇到了须要在两个窗口的页面利用 localStorage
同步传值web
如:移动web开发
localstorage
,在b窗口的某一个值也须要同步改变引用《h5移动web开发指南》上的话:浏览器
当同源页面的某个页面修改了
localStorage
,其他的同源页面只要注册了 storage 事件,就会触发
bash
因此,localStorage
的例子运行须要以下条件:app
localStorage
storage
事件*注意:在同一个网页修改本地存储,又在同一个网页监听,这样是没有效果的。ui
网页A:监听了storage
事件:
this
window.addEventListener("storage", function (e) {
console.log(e.newValue);
})复制代码
网页B:修改了 storage
事件:spa
localStorage.setItem("test", "1234");复制代码
此时,在网页A的storage会被触发,从而拿到值localstorage
*注意:两个网页必须同源才有效,并且不能为同一个页面code
若是非得要在同一网页监听怎么办?能够重写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");
复制代码