1

我想在同一个浏览器(在同一个域上)中的两个不同选项卡之间进行通信。

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

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

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

非常感谢!

4

2 回答 2

2

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

有关详细信息,请参阅:

Chrome 的 localStorage 实现的错误?

http://diveintohtml5.info/storage.html

于 2012-10-20T07:53:47.163 回答
2

似乎存储事件应该提供您需要的东西。

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

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

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

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

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

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

因此,引发更改的文档不会被警告。

于 2012-10-20T08:13:37.287 回答