2010-03-12 4 views

Répondre

24

Eh bien, le navigateur semble générer un événement de « charge » sur un élément dans le contexte du contenant page. La "charge" se déclenche lorsque le "src" est changé; ne sait pas s'il se déclenche lorsque l'iframe se modifie.

modifier: oui, il ne semble tirer lorsque la page rechargements "interne"

Ainsi, vous pouvez essayer:

$('iframe#yourId').load(function() { 
    alert("the iframe has been loaded"); 
}); 
+0

cela ne semble pas le feu en safari ou l'opéra, je n'ai pas vérifié ou chrome-à-dire encore – mcgrailm

+0

Hmm. Eh bien, la documentation de Microsoft n'est pas claire sur le sujet. Pour le tester, tout ce que j'ai fait était d'avoir une petite page avec un iframe, et j'ai pointé l'iframe vers un domaine aléatoire. Dans la page de test, je viens de configurer un écouteur d'événement jQuery pour "charger" sur l'élément iframe. – Pointy

+0

ça marche dans ff et c'est cool mais je vais avoir besoin de quelque chose qui fonctionne tout autour du tableau ou au moins la plupart du temps – mcgrailm

4

Am faire un tour Litle (saleté, mais il fonctionne) :) pour afficher un objet de chargement

function changeDet(old){ //detect src changes 
    if($("iframe#ifID").attr('src') != old){ 
     $("iframe#ifID").width(0); //error if i hide ...? 
    } 

    setTimeout('changeDet("' + $("#db").attr('src') + '")',10); 
} 

var df = $('#iframe#ifID'); 

df.load(function(){ //content loaded 
setTimeout('$("#db").width(var_default_width);',100); 
}); 

changeDet(); 

$(function(){ 
    //jq stuffs... 
}) 
</script> 
+0

Pas très viable car vous devez faire des comparaisons de chaînes toutes les 10 millisecondes, ce qui peut être facilement un fardeau lorsque la taille du document augmente en Mo. –

+0

Évitez d'utiliser une chaîne dans 'setTimeout' c'est a) un risque de sécurité, b) lent, c) impossible à gérer par l'interpréteur JS. – Sukima

1

Vous pouvez l'utiliser pour appliquer l'événement sur le changement .. Fonctionne sur IE8 et Firefox

if(document.addEventListener){ 
    yourIFrameObject.contentWindow.document.addEventListener('keyup', yourFunction, false); 
    // window.frames[0].document.addEventListener('keyup', yourFunction, false); 
} 
else{ 
//for IE8 
    yourIFrameObject.contentWindow.document.attachEvent('onkeyup', yourFunction); 
} 

Vous pouvez utiliser une déclaration mouseup si nécessaire

+0

cela ne fonctionnera pas pour les sources inter-domaines – David

Questions connexes