我试图关注the examples on the Safari Developer Site。
文档建议添加如下的事件监听器:
window.addEventListener('storage', storage_handler, false);
然后像这样设置处理函数:
function storage_handler(evt)
{
alert('The modified key was '+evt.key);
alert('The original value was '+evt.oldValue);
alert('The new value is '+evt.newValue);
alert('The URL of the page that made the change was '+evt.url);
alert('The window where the change was made was '+evt.source);
}
但我似乎无法将此代码用于我的机器(OS X 10.6,Safari 5.01)以及iPhone 3GS(iOS 4.02)上的Safari。
This article提供了一个单独的方法:
window.onload = function() {
...
document.body.setAttribute("onstorage", "handleOnStorage();");
}
function handleOnStorage() {
if (window.event && window.event.key.indexOf("index::") == 0){
$("stats").innerHTML = "";
displayStats();
}
}
但我也没有任何运气。
我做错了吗?这是一个错误吗?
答案 0 :(得分:20)
在进一步调查之后(并在朋友的帮助下),我发现当我在当前窗口或选项卡中的页面上localstorage值的值发生更改时,不会调用storage_handler方法,而是在另一个选项卡中更改时。
例如,如果我打开了两个选项卡,并在每个选项卡的页面中有控件来更改localstorage设置,那么当我在第一个选项卡中点击控件时,将在另一个选项卡中调用storage_handler方法。 / p>
答案 1 :(得分:2)
如果要在对象保存在同一页面的localstorage中后执行某些操作,可以在调用localStorage.setItem
后手动调用该函数,并从storage
eventlistener调用相同的函数来处理多个标签。
答案 2 :(得分:0)
我意识到这是在询问Safari,但是,根据Mozilla开发者网络,只有在从页面外部更改Web存储对象时才会触发StorageEvent,例如,在另一个选项卡中。
https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API
向下滚动到"使用StorageEvent"响应存储更改。
(我会将此作为对已接受答案的评论添加,但我没有代表那个。)