window.postmessage()在不同选项卡中的应用程序之间进行通信

时间:2014-08-12 18:10:41

标签: javascript cross-domain cross-platform postmessage

是否有机会使用window.postmessage()在同一浏览器的不同标签中的两个不同应用程序之间进行通信?

我知道你可以在应用程序和iFrame之间做到这一点,但不同的标签呢?

更新

案例场景:

  1. 用户在一个标签页中播放来自vk.com的音频

  2. 用户在另一个标签页

  3. 中开始播放来自youtube.com的视频
  4. youtube.com将postmessage()发送给vk.com 视频开始播放

  5. vk.com使音频无声
  6. 由于

1 个答案:

答案 0 :(得分:7)

如果您使用"中间页"可以这样做。加载到iFrame中。

(理论)解决方案使用两种不同的页间通信方法:

  • window.postMessage()
  • localStoragesessionStorage(请参阅this guide了解其工作原理)

"中间页"充当代理,将消息事件转换为localStorage事件,反之亦然。如果你加载这个"中间页面"在两个页面的iFrame中,您在一个标签中发布的任何消息都会在另一个标签中弹出:

[Tab 1] --(postMessage)--> [iFrame 1]
                                |
                          (localStorage)
                                |
                                v
                           [iFrame 2] --(postMessage)--> [Tab 2]

如果其中一个标签与中间页面位于同一个域中(此处显示为Tab 2),则可以简化此操作(不会影响其他标签的设置)。

[Tab 1] --(postMessage)--> [iFrame 1]
                                |
                          (localStorage)
                                |
                                v
                             [Tab 2]