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