如何检测特定localStorage变量的内容何时在浏览器选项卡之间更改?

时间:2012-10-18 19:10:42

标签: javascript browser tabs bind local-storage

我想在同一个浏览器中的两个不同标签之间进行通信(在同一个域中)。

当特定事件在第二个选项卡中触发时,我更改了localstorage变量值(使用Javascript)。我想在第一个选项卡上检测到此更改。该变量名为“status”,值从0更改为1

我正在考虑一个可能的解决方案,我认为在第一个选项卡上使用计时器会起作用,但我认为必须有更好的方法。

您是否知道有没有办法在不使用计时器的情况下检测“状态”变量值何时发生变化?

非常感谢!

2 个答案:

答案 0 :(得分:2)

肯定有更好的方法 - 使用localstorage机制中内置的事件。当您在tab2中更新localstorage时,tab1将获得一个更新事件,然后您可以将其用作从localstorage读取新值的信号。

有关详细信息,请参阅:

Bug with Chrome's localStorage implementation?

http://diveintohtml5.info/storage.html

答案 1 :(得分:2)

存储事件似乎应该提供您所需要的内容。

存储事件的HTML规范(http://dev.w3.org/html5/webstorage/#the-storage-event) 说:

  

如上所述,存储区域发生变化时会触发存储事件   在前两节中(用于会话存储,用于本地存储)。

     

发生这种情况时,用户代理必须将任务排队以触发事件   名称存储,不会冒泡且不可取消,   并且在每个Window对象上使用StorageEvent接口   Document对象具有受影响的Storage对象。

请注意最后一句,所有可以访问存储的窗口都应该收到任何更改通知。

但请注意规范前一部分中的以下条款:

  

当调用setItem(),removeItem()和clear()方法时   与会话存储区域关联的存储对象x,如果   方法做了一些事情,然后在每个Window对象的Window中   object的sessionStorage属性的Storage对象与之关联   除了x之外的相同存储区域,必须触发存储事件,如   如下所述。

因此,没有提醒引起变更的文件。