我有一个图书馆 sysend.js允许使用存储事件将消息发送到其他选项卡/窗口。在 IE 中,事件也在使用 setItem 的同一页面上被触发。有没有一种方法可以在 IE 中检测存储事件是在相同页面还是不同页面上触发的?
我的存储事件代码如下所示:
var uniq_prefix = '___sysend___';
function get(key) {
return localStorage.getItem(uniq_prefix + key);
}
var callbacks = {};
window.addEventListener('storage', function(e) {
// get user key
var key = e.key.replace(new RegExp('^' + uniq_prefix), '');
if (callbacks[key]) {
var obj = JSON.parse(get(key));
if (obj) {
// don't call on remove
callbacks[key].forEach(function(fn) {
fn(obj[1], key);
});
}
}
}, false);
localStorage 中的数据是数组,id 为第一项,实际数据为第二项。
最佳答案
您可以检查事件 url 是否与 location.href 不同:
window.addEventListener('storage', function(e) {
if (e.url != location.href) {
var key = e.key.replace(re, '');
if (callbacks[key]) {
var value = e.newValue || get(key);
if (value != random_value) {
var obj = JSON.parse(value);
if (obj) {
// don't call on remove
callbacks[key].forEach(function(fn) {
fn(obj[1], key);
});
}
}
}
}
}, false);
关于jquery - 如何检测 localStorage 存储事件是否来自 IE 中的同一页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41316798/