我正在使用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}}
答案 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>
注意:存储事件仅在其他标签中触发。您目前不在标签中。点击^:)