javascript - 如果我在一个页面上有两个 iframe,是否可以将源自一个的 MessageChannel 传输到另一个?
问题描述
如果我的页面上有两个 iframe 并希望在它们之间发送消息,我可以在其中一个中创建一个消息通道并将其发送到另一个端口(通过主机上的中介脚本)吗?
<body>
<iframe src="https://example.com/a" />
<iframe src="https://example.com/b" />
</body>
编辑:
还是有更好的选择,例如使用主机上的中介脚本作为消息代理,或者可能在主机中创建 MessageChannel 并将两个端口向下传递?
解决方案
当然可以,只需让父文档适当地传输它:
const channel = new MessageChannel();
frameA.contentWindow.postMessage('', '*', [channel.port1]);
frameB.contentWindow.postMessage('', '*', [channel.port2]);
然后在每一帧中,您将获取端口并在 frameA 和 frameB 之间直接通信。
创建 MessageChannel 的位置无关紧要,端口会被传输。
由于 StackSnippets 过度保护的 iframe 不允许我们对内部框架做任何事情,这里是一个小提琴。
推荐阅读
- javascript - 在窗口调整大小时更改元素的大小
- php - Wordpress 在帖子内容中错误地显示 HTML 实体和十六进制实体
- typescript - 打字稿可以缩小泛型类型中的联合类型吗?
- django - 变量未显示在 Django 模板上
- r - R:本地主机上的 H2O 初始化问题(.h2o.startJar 中的错误:返回代码 = 1)
- c# - jQuery 发布到控制器并重定向到 ASP.NET MVC 视图
- c# - 从 Asp.net Web 应用程序执行 Windows 服务 (*.exe)
- android - 通过 Android Studio 运行单元测试第一次工作然后失败
- java - android SensorEventListener 没有写它应该写的东西
- tsql - SSRS 分组摘要 - Max 不工作