WebC消息与MessageChannel之间有什么区别?

时间:2013-09-21 14:54:09

标签: javascript html5

使用html5我可以这样做:

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

或者我可以使用MessageChannel:

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

这两种方式有什么区别?当我必须使用第一个变体并且必须使用第二个变体时?

1 个答案:

答案 0 :(得分:1)

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

  

创建新的MessageChannel对象时,它有两个连接   MessagePort对象(port1和port2)。其中一个端口被发送到   另一个窗口或框架,可以发送和接收消息   使用window.postMessage时需要重复的原点检查。   验证端口的来源和消息只需在完成时进行   将端口发送到除创建它们之外的窗口。   MessagePort通过发送和接收简化了消息传递过程   消息通过两个(只有那两个)连接的端口。消息   使用postMessage在端口之间发布。既然端口会   只接受连接端口之间的消息,不再进一步   建立连接后需要验证。   MessageChannel支持之间的异步通信   IFrameElements,跨域窗口或相同的页面通信。    http://msdn.microsoft.com/en-us/library/windows/apps/hh441303.aspx