2010-08-25 63 views
10

我试图关注the examples on the Safari Developer Site每次在Safari 5+中更新localStorage时,如何获得一个事件触发?

文档建议添加事件监听器,如下:

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(); 
    } 
} 

但我还没有与任何运气无论是。

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

+1

我固定在你对你的问题的联系;一旦你得到更多的代表,你应该能够很快添加更多的链接。可悲的是,我不知道你的问题的答案。希望别人能帮助! – 2010-08-25 05:09:43

+0

其代码片段的一个很好的演示已经可以[在这里](http://html5demos.com/storage-events)了解这个概念以及它是如何工作的。 http://html5demos.com/storage-events – msoliman 2015-09-19 21:33:12

+0

仍然有这个链接,可能也有助于理解sessionStorage很好https://www.nczonline.net/blog/2009/07/21/introduction-to-sessionstorage/ – msoliman 2015-09-20 11:14:59

回答

19

经过进一步调查(并在朋友的帮助下),我发现当本地存储值的值在当前窗口或选项卡中的页面上发生更改时,调用storage_handler方法时,但在另一个选项卡中更改时。例如,如果我打开了两个选项卡,并且在每个选项卡的页面中都有控件来更改本地存储设置,那么当我在第一个选项卡中选中控件时,将在另一个选项卡中调用storage_handler方法。

+0

您是否找到可靠的来源?你能提供给我们吗? 我无法从规范https://www.w3.org/TR/webstorage/#sessionStorageEvent推断出。但无论如何,我在解释时遇到了困难,特别是它提到“完全活跃”文档的部分。 – leods92 2017-04-25 19:17:49

2

如果要在对象保存在本地存储中的对象保存在同一页面后执行某些操作,则可以在调用localStorage.setItem后手动调用该函数,并调用storage eventlistener中的相同函数来处理多个选项卡。

相关问题