从许多来源中,我发现本地存储事件仅在不引发更改的窗口/选项卡中触发。
我的问题是,有什么方法可以从同一个窗口检测到变化?或者可能覆盖强制事件在同一个窗口/选项卡内触发的功能?
不包括该选项似乎不切实际,但我找不到办法。
谢谢
从许多来源中,我发现本地存储事件仅在不引发更改的窗口/选项卡中触发。
我的问题是,有什么方法可以从同一个窗口检测到变化?或者可能覆盖强制事件在同一个窗口/选项卡内触发的功能?
不包括该选项似乎不切实际,但我找不到办法。
谢谢
仅供参考,这就是我最终得到的。
localStorage.setItem('selectedOrgs', JSON.stringify(this.selectedOrgs));
// trigger the event manually so that it triggers in the same window
// first create the event
var e = $.Event("storage");
// simulate it being an actual storage event
e.originalEvent = {
key: 'selectedOrgs',
oldValue: prev,
newValue: JSON.stringify(this.selectedOrgs)
};
// Now actually trigger it
$(window).trigger(e);
注意:我只使用 oldValue 和 newValue.. 如果您使用其他属性,请确保并正确设置它们。
您还可以覆盖 localStorage.setItem 以便它以类似的方式在当前窗口中触发。
这可以通过localDataStorage轻松处理,您可以在其中透明地设置/获取以下任何“类型”:Array、Boolean、Date、Float、Integer、Null、Object 或 String。当然,它还会在同一窗口/选项卡中触发键值更改的事件,例如由 set 或 remove 方法进行的更改。
[免责声明] 我是该实用程序的作者 [/DISCLAIMER]
实例化该实用程序后,以下代码段将允许您监视事件:
function nowICanSeeLocalStorageChangeEvents( e ) {
console.log(
"subscriber: " + e.currentTarget.nodeName + "\n" +
"timestamp: " + e.detail.timestamp + " (" + new Date( e.detail.timestamp ) + ")" + "\n" +
"prefix: " + e.detail.prefix + "\n" +
"message: " + e.detail.message + "\n" +
"method: " + e.detail.method + "\n" +
"key: " + e.detail.key + "\n" +
"old value: " + e.detail.oldval + "\n" +
"new value: " + e.detail.newval + "\n" +
"old data type: " + e.detail.oldtype + "\n" +
"new data type: " + e.detail.newtype
);
};
document.addEventListener(
"localDataStorage"
, nowICanSeeLocalStorageChangeEvents
, false
);