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

标签 javascript cross-domain cross-platform postmessage

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

我知道您可以在应用程序和 iFrame 之间执行此操作,但是不同的选项卡呢?

更新:

案例场景:

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

  2. 用户开始在另一个标签页中播放来自 youtube.com 的视频

  3. youtube.com 向 vk.com 发送 postmessage() 视频开始播放

  4. vk.com 使音频静音

谢谢

最佳答案

如果您使用在 iFrame 中加载的“中间页面”,则可以做到这一点。

(理论上的)解决方案使用两种独立的页面间通信方法:

  • window.postMessage()
  • localStoragesessionStorage - 参见 this guide这是如何工作的;该技术涉及在一个 iFrame 中设置值,并在另一个 iFrame 中监听事件。

“中间页面”充当代理,将消息事件转换为 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]

关于javascript - window.postmessage() 在不同选项卡中的应用程序之间进行通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25271243/

相关文章:

jquery - Greasemonkey、跨域、jQuery、get() 请求失败,出现 405 "method not allowed"

PHP 'file_get_contents' 无法从服务器运行

jsp - 在 Tomcat7 中向错误页面添加 header

javascript - 我可以让隐藏的内容在移动到 div 时出现吗?

javascript - 如何触发 :active pseudoclass on keyboard 'enter' press?(仅使用 CSS)

Javascript require 方法在另一个 require 方法中

android - ionic 标签 : content not fitting when changing platform

javascript - 使用 async wait 抽象 Hapi17 路由

python - Python hash() 函数的正整数

.net - Android 版 Mono 中的 Web 引用