/**
* @param {Object} s 页面之间通信的标识符,需要通信的页面之间该标识符必须一致
* @param {Object} f 触发执行的方法(本页面需要被触发的方法)
* 该方法在需要通信的每个页面上都必须调用
*/
function pagesCommunication(s, f) {
//监听事件,内部调用传入的方法
var listenerFun = function(e) {
//如果key值匹配才会触发,即需要通信的页面之间该标识符必须一致
if(s!=e.key) return;
f();
}
//清除事件,防止重复触发
window.removeEventListener("storage", listenerFun);
//绑定调用事件
window.addEventListener('storage', listenerFun);
//通过返回对象进行页面通信的触发
return function() {
//如果存在,则需要通过remove进行触发
if (localStorage.getItem(s)) {
localStorage.removeItem(s);
} else {
//不存在,则通过set进行触发
localStorage.setItem(s, "pagesCommunication");
}
}
}
页面1
var aa = pagesCommunication("page",function(){console.log(1111)});
页面2
var aa = pagesCommunication("page",function(){});
aa();//此时在页面1的控制台会打印出1111