Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I detect whether an iframe is loaded?

I am trying to check whether an iframe has loaded after the user clicks a button.

I have

$('#MainPopupIframe').load(function(){     console.log('load the iframe')     //the console won't show anything even if the iframe is loaded. }) 

HTML

<button id='click'>click me</button>  //the iframe is created after the user clicks the button. <iframe id='MainPopupIframe' src='http://...' />...</iframe> 

Any suggestions?

By the way, my iframe is created dynamically. It doesn’t load with the initial page load.

like image 670
Rouge Avatar asked Sep 04 '12 15:09

Rouge


People also ask

How do I check if an iframe is empty?

If you want to check if no page loaded inside iframe, and the iframe is not cross-domain you could check for the existence of the body tag inside of the iframe. If it exists, then something loaded. If the iframe is cross-domain, you will be blocked by the same-origin policy.

Does iframe have onload?

If you want to run JavaScript when an iframe has finished loading, you can either: include code in the iframe tag's onload attribute, or. assign code to the iframe's onload event handler property.


2 Answers

You may try this (using jQuery)

$(function(){     $('#MainPopupIframe').load(function(){         $(this).show();         console.log('iframe loaded successfully')     });              $('#click').on('click', function(){         $('#MainPopupIframe').attr('src', 'https://heera.it');         }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id='click'>click me</button>  <iframe style="display:none" id='MainPopupIframe' src='' /></iframe>

jsfiddle DEMO.

Update: Using plain javascript

window.onload = function(){     var ifr = document.getElementById('MainPopupIframe');     ifr.onload=function(){         this.style.display='block';         console.log('laod the iframe')     };      var btn = document.getElementById('click');         btn.onclick=function(){         ifr.src='https://heera.it';         }; };
<button id='click'>click me</button>  <iframe style="display:none" id='MainPopupIframe' src='' /></iframe>

jsfiddle DEMO.

Update: Also you can try this (dynamic iframe)

$(function(){     $('#click').on('click', function(){         var ifr = $('<iframe/>', {             id:'MainPopupIframe',             src:'https://heera.it',             style:'display:none;width:320px;height:400px',             load:function(){                 $(this).show();                 alert('iframe loaded !');             }         });         $('body').append(ifr);         }); });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <button id='click'>click me</button><br />

jsfiddle DEMO.

like image 141
The Alpha Avatar answered Oct 05 '22 01:10

The Alpha


I imagine this like that:

<html> <head> <script> var frame_loaded = 0; function setFrameLoaded() {    frame_loaded = 1;    alert("Iframe is loaded"); } $('#click').click(function(){    if(frame_loaded == 1)     console.log('iframe loaded')    } else {     console.log('iframe not loaded')    } }) </script> </head> <button id='click'>click me</button>  <iframe id='MainPopupIframe' onload='setFrameLoaded();' src='http://...' />...</iframe> 
like image 44
Desislav Kamenov Avatar answered Oct 05 '22 00:10

Desislav Kamenov