有消息频道和没有消息频道的网络消息有什么区别

What's difference between web-messaging with MessageChannel and without?

本文关键字:消息 频道 什么 网络 区别      更新时间:2023-09-26

使用 html5 我可以这样做:

document.getElementById('someIframe').contentWindow.postMessage('hi', 'someDomain');

或者我可以使用MessageChannel:

var mc = new MessageChannel();
document.getElementById('someIframe').contentWindow.postMessage('hi', 'someDomain',[mc.port2]);

这两种方式之间真正的区别是什么?何时必须使用第一个变体,何时必须使用第二个变体?

我怀疑我能比下面更好地解释它,但是重要的一点是,一旦端口被发送,后续消息就不需要进行源检查。使用 window.addEventListener('message', ...) 时,您必须在每次收到消息时验证消息源是否受信任。

当您创建新的 MessageChannel 对象时,它有两个连接的 消息端口对象(端口 1 和端口 2)。其中一个端口被发送到 另一个窗口或框架,并且可以在没有的情况下发送和接收消息 使用window.postMessage时需要的重复来源检查。 仅在以下情况下需要验证端口和消息的来源 端口被发送到创建它们的窗口以外的窗口。 消息端口通过发送和接收简化了消息传递过程 通过两个(并且仅这两个)连接的端口的消息。消息 使用 postMessage 在端口之间发布。由于端口将 仅接受连接端口之间的消息,不再接受 建立连接后需要进行验证。 消息通道支持之间的异步通信 IFrameElements、跨域窗口或同一页面通信。 http://msdn.microsoft.com/en-us/library/windows/apps/hh441303.aspx