捕获iframe加载完成事件

有一种方法来捕获一个iframe的内容已完全从父页面加载?

<iframe>元素有一个load事件


你如何听取这个事件取决于你,但通常最好的方法是:

1)以编程方式创build您的iframe

它确保您的load监听器总是通过在iframe开始加载之前附加它来调用。

 <script> var iframe = document.createElement('iframe'); iframe.onload = function() { alert('myframe is loaded'); }; // before setting 'src' iframe.src = '...'; document.body.appendChild(iframe); // add it to wherever you need it in the document </script> 

2)内嵌JavaScript是另一种可以在HTML标记中使用的方法。

 <script> function onMyFrameLoad() { alert('myframe is loaded'); }; </script> <iframe id="myframe" src="..." onload="onMyFrameLoad(this)"></iframe> 

3)你也可以在<script>标签内附加元素之后的事件监听器,但是请记住,在这种情况下,添加监听器的时候iframe已经被加载了。 因此它可能不会被调用(例如iframe非常快,或者来自caching)。

 <iframe id="myframe" src="..."></iframe> <script> document.getElementById('myframe').onload = function() { alert('myframe is loaded'); }; </script> 

另请参阅我的其他答案, 哪些元素也可以触发这种types的load事件

上述两个答案都没有为我工作,但是这样做

更新

正如@doppleganger在下面指出的,自从jQuery 3.0开始,load就不见了,所以这是一个更新的版本。 请注意,这实际上将工作在jQuery 1.7+,所以你可以用这种方式来实现,即使你还没有jQuery 3.0。

 $('iframe').on('load', function() { // do stuff }); 

你也可以通过这种方式捕获jquery ready事件:

 $('#iframeid').ready(function () { //Everything you need. }); 

这是一个工作的例子:

http://jsfiddle.net/ZrFzF/

还有另外一个一致的方法( 只适用于IE9 + )在香草JavaScript为此:

 const iframe = document.getElementById('iframe'); const handleLoad = () => console.log('loaded'); iframe.addEventListener('load', handleLoad, true) 

如果你对Observables感兴趣,这个技巧就是:

 return Observable.fromEventPattern( handler => iframe.addEventListener('load', handler, true), handler => iframe.removeEventListener('load', handler) );