捕获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. });
这是一个工作的例子:
还有另外一个一致的方法( 只适用于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) );