使用html5我可以这样做:
document.getElementById('someIframe').contentWindow.postMessage('hi', 'someDomain');
或者我可以使用MessageChannel:
var mc = new MessageChannel();
document.getElementById('someIframe').contentWindow.postMessage('hi', 'someDomain',[mc.port2]);
这两种方式有什么区别?当我必须使用第一个变体并且必须使用第二个变体时?
答案 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