J'ai eu le même problème et en plus, j'ai eu besoin de vérifier si l'iframe est chargée indépendamment de la politique cross-domain. Je développais une extension chrome qui injecte certains script sur une page web et affiche du contenu de la page parent dans une iframe. J'ai essayé l'approche suivante et cela a parfaitement fonctionné pour moi.
P.S. : Dans mon cas, je peux contrôler le contenu de l'iframe mais pas celui du site parent. (L'iframe est hébergée sur mon propre serveur)
Premièrement :
Créer une iframe avec un data-
comme suit (cette partie était dans le script injecté dans mon cas)
<iframe id="myiframe" src="http://anyurl.com" data-isloaded="0"></iframe>
Maintenant, dans le code de l'iframe, utilisez :
var sourceURL = document.referrer;
window.parent.postMessage('1',sourceURL);
Revenons maintenant au script injecté dans mon cas :
setTimeout(function(){
var myIframe = document.getElementById('myiframe');
var isLoaded = myIframe.prop('data-isloaded');
if(isLoaded != '1')
{
console.log('iframe failed to load');
} else {
console.log('iframe loaded');
}
},3000);
et,
window.addEventListener("message", receiveMessage, false);
function receiveMessage(event)
{
if(event.origin !== 'https://someWebsite.com') //check origin of message for security reasons
{
console.log('URL issues');
return;
}
else {
var myMsg = event.data;
if(myMsg == '1'){
//8-12-18 changed from 'data-isload' to 'data-isloaded
$("#myiframe").prop('data-isloaded', '1');
}
}
}
Cela ne répond peut-être pas exactement à la question, mais c'est en effet un cas possible de cette question que j'ai résolu par cette méthode.
0 votes
Vous ne voulez donc pas que l'iframe charge quoi que ce soit s'il lui faut plus de 5 secondes pour le faire ?
0 votes
Merci pour votre aide :) . Oui, je ne veux pas que l'iframe charge quoi que ce soit si elle met plus de 5 secondes à se charger. L'utilisation de ".ready()" comme vous le montrez ci-dessous ne fonctionne pas.
0 votes
Voir ma réponse ici stackoverflow.com/questions/17158932/
0 votes
Cochez cette réponse - forums.tumult.com/t/detect-iframe-loaded/7588