Channel Messaging API - Web API 接口参考 编辑

Channel Messaging API 允许两个不同的脚本运行在同一个文档的不同浏览器上下文(比如两个 iframe,或者文档主体和一个 iframe,使用 SharedWorker 的两个文档,或者两个 worker)来直接通讯,在每端使用一个端口(port)通过双向频道(channel)向彼此传递消息。

Note: 此特性在 Web Worker 中可用。

Channel 通信的概念和用法

使用 MessageChannel() 构造函数来创建通讯信道。一旦创建,信道的两个端口即可通过 MessageChannel.port1 和 MessageChannel.port2 属性进行访问(都会返回 MessagePort  对象)。创建信道的应用程序使用 port1,在另一端的程序使用 port2 —— 你向 port2 发送信息,然后携带 2 个参数(需要传递的消息,要传递所有权的对象,在这里是 port 自身)调用 window.postMessage 方法将端口信息传递到另一个浏览器上下文。

当这些可传递的对象被传递后,他们就从之前所属的上下文中消失了。比如一个 port,一旦被发送,在原本的上下文中就再也不可用了。注意当前仅有 ArrayBuffer 和 MessagePort 对象可以被发送。

另一个浏览器上下文可以使用 MessagePort.onmessage 监听信息,并使用事件的 data 属性获取消息内容。你可以通过 MessagePort.postMessage 向原来的文档发送应答消息。

当你想要停止通过信道发送消息时,你可以调用来关闭 MessagePort.close 端口。

更多使用这个 API 的资料参见:Using channel messaging 。

Channel 通信接口

MessageChannel
创建一个新的发送消息的信道。
MessagePort
控制消息信道的端口,允许从一个端口发送消息,并监听另一端消息的到来。
PortCollection
MessagePort 数组,一种同时向多个端口广播消息的实验性解决方案。

例子

规格

规格状态补充
HTML Living Standard
Channel messaging
Living Standard 

浏览器兼容性

MessageChannel

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

MessagePort

The compatibility table on this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.

参考

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

词条统计

浏览:84 次

字数:6028

最后编辑:7年前

编辑次数:0 次

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文