iframe有哪些加载事件

iframe有哪些加载事件

iframe是一种HTML标签,它可以将一个HTML文档嵌入到另一个HTML文档中。在实际开发中,我们常常需要检测iframe的加载状态,如何监听iframe的加载事件呢?

1. onload事件

iframe标签支持一个名为onload的事件属性,它会在iframe加载完成时触发。当iframe的src属性中的文档加载完成时,就会触发onload事件。我们可以在父文档中为iframe元素添加onload处理程序,以便在iframe加载内容时做出响应。

下面是一个使用onload事件的示例:

<iframe src="http://www.example.com" onload="alert('iframe loaded')"></iframe>

在这个例子中,当iframe的内容加载完成时,会出现一个警告框。

2. onreadystatechange事件

IE浏览器提供了一个名为onreadystatechange的事件属性。这个事件会在iframe的readyState属性发生变化时触发。readyState属性表示iframe的加载状态,它有如下几个值:

uninitialized - 还没有调用open()方法

loading - 正在加载文档

loaded - 已经加载文档,但不包括子资源,如图片等

interactive - 已经加载文档和子资源,但文档仍在解析中

complete - 文档和子资源已经完成加载

基于readyState属性,我们可以编写一段JavaScript代码来监听iframe的加载状态。下面是一个示例:

<iframe id="myIframe" src="http://www.example.com"></iframe>

<script>

var iframe = document.getElementById('myIframe');

iframe.onreadystatechange = function() {

if (iframe.readyState === 'complete') {

// do something...

}

};

</script>

在这个例子中,当iframe的readyState属性变为complete时,就会执行相应的处理程序。

3. DOMContentLoaded事件

DOMContentLoaded事件会在iframe的文档加载完成后触发。它类似于document的DOMContentLoaded事件,不过它只在iframe的文档加载完成时触发,不会等待子资源(如图片)加载完成。

要为iframe添加DOMContentLoaded事件处理程序,可以使用以下代码:

<iframe id="myIframe" src="http://www.example.com"></iframe>

<script>

var iframe = document.getElementById('myIframe');

iframe.addEventListener('DOMContentLoaded', function() {

// do something...

});

</script>

在这个例子中,当iframe的文档加载完成后,就会执行相应的处理程序。

4. message事件

message事件用于在iframe和父窗口之间传递消息。当iframe向其父窗口发送消息时,父窗口的message事件处理程序就会执行。我们可以在父窗口中为iframe元素添加message事件处理程序,以便接收来自iframe的消息。

下面是一个使用message事件的示例:

<iframe id="myIframe" src="http://www.example.com"></iframe>

<script>

window.addEventListener('message', function(event) {

if (event.source === document.getElementById('myIframe').contentWindow) {

// do something...

}

});

</script>

在这个例子中,当iframe向其父窗口发送消息时,会执行相应的处理程序。

总结

iframe的加载事件包括了onload事件、onreadystatechange事件、DOMContentLoaded事件和message事件。不同的事件可以用来满足不同的需求,例如检测iframe的加载状态、接收来自iframe的消息等。

在实际开发中,我们应该根据具体的需求,选择合适的事件来对iframe进行监听。