HTML5 / JS存储事件处理程序

10

我正在使用 Safari Webkit 引擎与 HTML5 和 JS 创建离线应用程序,现在我正在使用 sessionStorage 数组来存储我的应用程序(模拟)的状态。

检查器中的存储数据运行良好,函数也正常运行,只是事件处理程序没有响应。

Anuraghttp://jsfiddle.net/pvRgH/上执行的测试在这里也不起作用:

window.addEventListener('storage', storageEventHandler, false);
function storageEventHandler(evt){
    alert("storage event called key: " + evt.key );
    switch(evt.key){
        case 'bat1':
        case 'bat2': batteryDCMeter(); break;
        case 'extPowerOn': rechargeBattery(); break;
    }   
}

function load()
{
    dashcode.setupParts();
    //set HTML 5 key/value's
    sessionStorage.setItem('bat1', 'OFF');
    sessionStorage.setItem('bat2', 'OFF');
    sessionStorage.setItem('bat1DC', '26.2');
    sessionStorage.setItem('bat2DC', '26.2');
}

function bat1OnOff(event)
{
    if(sessionStorage['bat1'] == 'OFF'){
        sessionStorage['bat1'] = 'ON';
    }else{
        sessionStorage['bat1'] = "OFF";
    }
}


function bat2OnOff(event)
{
    if(sessionStorage['bat2'] == 'OFF'){
        sessionStorage['bat2'] = 'ON';
    }else{
        sessionStorage['bat2'] = "OFF";
    }
}
4个回答

19

1
浏览器中的其他标签页触发了“存储”事件。当您在一个页面更改存储并在该页面上添加“addEventLister”时,窗口无法捕获消息。
例如,您有两个页面, pageOne更改存储,pageTwo将捕获“存储”消息并处理,但pageOne无法捕获消息。

0

您提供的代码链接没有给出任何结果。请查看更新的问题以获取更多代码。 - Ken
那么没有弹出警报提示存储事件处理程序被调用了吗?你在测试哪个版本的Safari? - Anurag
没有任何事情发生,我正在运行Safari 5.0(6533.16)MacOSX 10.6.3。 - Ken
1
对我来说也是什么都没有发生(Safari 5.0.3,Chrome 10)。 - Stefano

0
要在多个标签页之间进行通信,我们可以使用存储事件。您可以将数据项存储在本地存储中,这样您就会知道本地存储已更新。

查看代码。

      window.addEventListener("storage", storageEventHandler, false);

      function storageEventHandler(evt) {
        alert("storage updated");
      }

      function clickme() {
        localStorage.setItem("someKey", "someValue");
      }
<button onclick="clickme()">Click Me</button>

注意:存储事件只会在其他标签页中触发,而不是当前所在的标签页。点击^ :)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接