我向iFrame发送消息,但仅限于iFrame加载事件。在更改DOM之后,想要在没有页面重新加载的情况下手动触发它。
说明:这是一种调查和页面更改我发送页面大小。当我在DOM中插入新图像时出现问题,而不是我需要告诉父页面并触发iFrame load
事件。该消息仅在iFrame加载时转换为parent-> iframe,而不是iframe-> parent。
答案 0 :(得分:0)
您应该使用IFrame发布的消息,而不是触发加载事件。
外框中的JavaScript(这会为消息附加事件侦听器并在收到消息时显示警报):
window.addEventListener('message', function(e) {
// This check can be removed for testing purposes, but for security
// it's strongly recommended that you leave it in there and replace
// the domain with the one of your IFrame's src, to ensure you process
// only messages coming from your own code and not somebody else's.
if(e.origin != "http://yourdomain.com") return;
alert("Got a message: " + e.data);
});
内部框架中的JavaScript(这会向父窗口发送一条消息 - 它应该在那里触发监听器并显示警报):
// The second parameter can be replaced by "*" for testing, but again it
// is strongly recommended to use the domain you expect the outer frame
// to have, to ensure your message lands in the right window (in case
// another page loaded yours in an IFrame).
window.parent.postMessage("Hello World!", "http://yourdomain.com");
您也可以传递JS对象,而不是"Hello World!"
。
它也可以反过来:如果你也在IFrame中安装了一个消息监听器,那么你也可以使用像document.getElementById('myIframe').contentWindow.postMessage(...)
这样的东西从外框发送消息到内层消息。
另请参阅:http://blog.teamtreehouse.com/cross-domain-messaging-with-postmessage