Javascript 使用跨域的postMessage将Iframe发送到父级

Javascript 使用跨域的postMessage将Iframe发送到父级,javascript,windows,iframe,postmessage,Javascript,Windows,Iframe,Postmessage,我在使用postMessage时遇到了问题,即使是在网上和本网站上阅读了其他帖子之后 我有一个使用var abc_iframe=document.createElement(“iframe”)生成的iframe。根据我的理解,我假设将一个事件侦听器附加到该事件,以侦听来自iframe内的消息。 我试过: 1. abc_iframe.addEventListener("message", function(e){ console.log(e.data); }, false); 2. documen

我在使用postMessage时遇到了问题,即使是在网上和本网站上阅读了其他帖子之后

我有一个使用var abc_iframe=document.createElement(“iframe”)生成的iframe。根据我的理解,我假设将一个事件侦听器附加到该事件,以侦听来自iframe内的消息。 我试过:

1. abc_iframe.addEventListener("message", function(e){ console.log(e.data); }, false);
2. document.frames['id_iframe'].addEventListener("message", function(e){ console.log(e.data); }, false); 
(id_iframe right here being the id of the iframe)
3. WinJS.Application.addEventListener("message", function(e){ console.log(e.data); }, false);
这些都不起作用。 我正在使用从iframe内发送postMessage

1. parent.postMessage("message", "ms-appx://" + document.location.host);
2. window.parent.postMessage("message", "ms-appx://" + document.location.host);

iframe内容托管在另一个域(非本地)上。

您需要附加到窗口对象,而不是iframe,才能从iframe接收消息

window.addEventListener(function(e) {}));
在您发送的消息中,您应该包含允许父级识别发送消息的iframe的信息,因为来自所有窗口的所有消息都将由此事件处理程序处理


还请注意,addEventListener仅在某些浏览器中有效。较早的IE版本使用attachEvent。

您需要附加到窗口对象,而不是iframe,才能从iframe接收消息

window.addEventListener(function(e) {}));
在您发送的消息中,您应该包含允许父级识别发送消息的iframe的信息,因为来自所有窗口的所有消息都将由此事件处理程序处理

还请注意,addEventListener仅在某些浏览器中有效。旧的IE版本使用attachEvent