使用postMessage进行跨域的iframe到父级

时间:2012-12-17 02:05:04

标签: 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. 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内容托管在另一个域(非本地)上。

1 个答案:

答案 0 :(得分:1)

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

window.addEventListener(function(e) {}));

在您发送的邮件中,您应该包含允许父母识别发送邮件的iframe的信息,因为所有窗口的所有邮件都将由此事件处理程序处理。

另请注意,addEventListener仅适用于某些浏览器。较旧的IE版本使用attachEvent。