如何在iFrame中触发iFrame加载?

时间:2016-05-04 08:48:54

标签: javascript

我向iFrame发送消息,但仅限于iFrame加载事件。在更改DOM之后,想要在没有页面重新加载的情况下手动触发它。

说明:这是一种调查和页面更改我发送页面大小。当我在DOM中插入新图像时出现问题,而不是我需要告诉父页面并触发iFrame load事件。该消息仅在iFrame加载时转换为parent-> iframe,而不是iframe-> parent。

1 个答案:

答案 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