2010-03-12 27 views
22

Come posso rilevare quando il contenuto iframe è cambiato e fare qualcosa su quel codice di cambiamento pseudo sottoI contenuti iframe cambiano evento?

$('#waframe').contents().change(function(){ 
    //do stuff 
    }); 

risposta

24

Ebbene, il browser sembra generare un evento di "carico" su un elemento nel contesto del contenente pagina. Il "carico" si attiva quando viene cambiato "src"; non sono sicuro se si attiva quando l'iframe cambia se stesso.

edit: sì Sembra di sparare quando la pagina viene ricaricata "internamente"

Così si potrebbe provare:

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

questo non sembra al fuoco in Safari o Opera non ho controllato cioè cromo o ancora – mcgrailm

+0

Hmm. Bene, la documentazione di Microsoft non è chiara sull'argomento. Per provarlo, tutto ciò che ho fatto era avere una piccola pagina con un iframe, e ho indicato l'iframe in un mio dominio casuale. Nella pagina di test, ho appena impostato un listener di eventi jQuery per "caricare" sull'elemento iframe. – Pointy

+0

funziona in ff e questo è bello ma ho bisogno di qualcosa che funzioni a 360 gradi o almeno la maggior parte del modo – mcgrailm

4

Am facendo un trucco litle (sporco ma funziona) :) per visualizzare un oggetto carico

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

Non molto fattibile perché devi fare confronti tra stringhe ogni 10 millisecondi, che possono essere facilmente un onere quando la dimensione del doc aumenta a MB. –

+0

Evitare l'uso di stringhe in 'setTimeout' è a) un rischio per la sicurezza, b) lento, c) impossibile per l'interprete JS gestirlo con qualsiasi ragionevolezza. – Sukima

1

È possibile utilizzare questo evento per sparare sul cambiamento .. Funziona su IE8 e 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); 
} 

Si potrebbe utilizzare una dichiarazione mouseup se necessario

+0

non funzionerà per le fonti cross-domain – David

Problemi correlati