HTML5 / JS存储事件处理程序

时间:2010-06-16 15:57:35

标签: javascript javascript-events html5 event-handling addeventlistener

我正在使用safari webkit的引擎以及HTML5和JS创建一个离线应用程序现在我正在使用sessionStorage数组来存储我的应用程序的状态(模拟)。

存储数据与检查器工作正常,函数工作正常,它是没有响应的事件处理程序

Anurag 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"; } } {{1}}预先形成的测试也不起作用

{{1}}

4 个答案:

答案 0 :(得分:14)

只有从另一个窗口触发存储事件时,才会触发存储事件处理程序。

How can I get an event to fire every time localStorage is updated in Safari 5+?

答案 1 :(得分:0)

您能否提供一些关于如何存储密钥的代码?它适用于Safari - http://jsfiddle.net/pvRgH/

答案 2 :(得分:0)

'存储'事件由浏览器中的其他选项卡发生。当您在一个页面中更改存储并在此页面中也添加addEventLister时,该窗口无法捕获该消息。

例如

你有两页, pageOne更改存储,pageTwo将捕获'存储'消息并处理这个,但是pageOne无法捕获消息。

答案 3 :(得分:0)

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

签出代码。

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

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

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

注意:存储事件仅在其他标签中触发。您目前不在标签中。点击^:)

相关问题