首页 > 解决方案 > 如果我在一个页面上有两个 iframe,是否可以将源自一个的 MessageChannel 传输到另一个?

问题描述

如果我的页面上有两个 iframe 并希望在它们之间发送消息,我可以在其中一个中创建一个消息通道并将其发送到另一个端口(通过主机上的中介脚本)吗?

<body>
  <iframe src="https://example.com/a" />
  <iframe src="https://example.com/b" />
</body>

编辑:

还是有更好的选择,例如使用主机上的中介脚本作为消息代理,或者可能在主机中创建 MessageChannel 并将两个端口向下传递?

标签: javascripthtml

解决方案


当然可以,只需让父文档适当地传输它:

const channel = new MessageChannel();
frameA.contentWindow.postMessage('', '*', [channel.port1]);
frameB.contentWindow.postMessage('', '*', [channel.port2]);

然后在每一帧中,您将获取端口并在 frameA 和 frameB 之间直接通信。

创建 MessageChannel 的位置无关紧要,端口会被传输。

由于 StackSnippets 过度保护的 iframe 不允许我们对内部框架做任何事情,这里是一个小提琴


推荐阅读