我想在同一个浏览器(在同一个域上)中的两个不同选项卡之间进行通信。
当在第二个选项卡中触发特定事件时,我更改了本地存储变量值(使用 Javascript)。我想在第一个选项卡上检测到这种变化。变量名为“status”,值从 0 变为 1
我正在考虑一个可能的解决方案,我认为在第一个选项卡上使用计时器会起作用,但我也认为必须有更好的方法。
您知道是否有任何方法可以在不使用计时器的情况下检测“状态”变量值何时发生变化?
非常感谢!
我想在同一个浏览器(在同一个域上)中的两个不同选项卡之间进行通信。
当在第二个选项卡中触发特定事件时,我更改了本地存储变量值(使用 Javascript)。我想在第一个选项卡上检测到这种变化。变量名为“status”,值从 0 变为 1
我正在考虑一个可能的解决方案,我认为在第一个选项卡上使用计时器会起作用,但我也认为必须有更好的方法。
您知道是否有任何方法可以在不使用计时器的情况下检测“状态”变量值何时发生变化?
非常感谢!
肯定有更好的方法——使用本地存储机制中内置的事件。当您在 tab2 中更新 localstorage 时,tab1 将获得一个更新事件,然后您可以将其用作从 localstorage 读取新值的信号。
有关详细信息,请参阅:
似乎存储事件应该提供您需要的东西。
关于存储事件的 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 之外的相同存储区域相关联,必须触发存储事件,如下所述。
因此,引发更改的文档不会被警告。