每次在Safari 5+中更新localStorage时,如何才能触发事件?

Jas*_*son 11 html safari local-storage

我试图按照Safari开发者网站上的示例进行操作.

文档建议添加一个事件监听器,如下所示:

window.addEventListener('storage', storage_handler, false);
Run Code Online (Sandbox Code Playgroud)

然后像这样设置处理函数:

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);
}
Run Code Online (Sandbox Code Playgroud)

但我似乎无法在我的机器(OS X 10.6,Safari 5.01)上使用此代码,也无法在我的iPhone 3GS(iOS 4.02)上使用Safari.

本文提供了一个单独的方法:

window.onload = function() {
    ...
    document.body.setAttribute("onstorage", "handleOnStorage();");
}

function handleOnStorage() {
    if (window.event && window.event.key.indexOf("index::") == 0){
        $("stats").innerHTML = "";
        displayStats();
    }
}
Run Code Online (Sandbox Code Playgroud)

但我也没有任何运气.

难道我做错了什么?这是一个错误吗?

Jas*_*son 20

在进一步调查之后(并在朋友的帮助下),我发现当我在当前窗口或选项卡中的页面上localstorage值的值发生更改时,不会调用storage_handler方法,而是在另一个选项卡中更改时.

例如,如果我打开了两个选项卡,并在每个选项卡的页面中有控件来更改localstorage设置,那么当我在第一个选项卡中点击控件时,将在另一个选项卡中调用storage_handler方法.