Imansible impostare document.body.innerHTML di IFrame in Firefox

Ho cercato un modo cross-browser per impostare in modo programmatico il innerHTML di un IFrame. (Come in http://roneiv.wordpress.com/2008/01/18/get-the-content-of-an-iframe-in-javascript-crossbrowser-solution-for-both-ie-and-firefox/ ) . Ho scritto alcuni esempi di codice (sotto), e posso farlo funzionare su Safari e Chrome, ma non su Firefox. Qualcuno può aiutarmi a capire cosa devo fare invece (in modo portatile)?

  
document.getElementById("FRAME2div").innerHTML = ''; document.getElementById("IFRAME2").contentWindow.document.body.innerHTML = '

NETSCAPE

';

In Firefox, il contenuto della cornice sembra non essere riconosciuto quando non è stato impostato alcun contenuto iniziale. Il metodo più semplice per risolvere questo problema è mostrato nel seguente codice:

 //Note: ID is not necessary for this example document.getElementById("FRAME2div").innerHTML = ''; var doc = frames["IFRAME2"].document; //Trigger a page "load". doc.open(); doc.close(); //Set innerHTML of the body tag. doc.body.innerHTML = '

NETSCAPE

';

Un altro metodo consiste nell’impostazione della proprietà src su javascript:" " e registrare un gestore di eventi di caricamento una tantum. Questo metodo è leggermente più complesso, quindi non lo descrivo in dettaglio.


È ansible accedere a tutti gli oggetti della finestra dei frame tramite l’object frame , in base al nome.

Quindi, consiglio di usare il seguente codice:

 frames['IFRAME2'].document.documentElement.innerHTML = "..."; 

document.documentElement fa riferimento all’elemento root di un documento, in genere . È ansible che la proprietà body del document non sia ancora pronta, quando chiami il tuo codice corrente. Facendo riferimento all’elemento radice, questo problema viene aggirato.

Stai impostando il innerHTML mentre c’è un in-flight about:blank load per l’iframe. Al termine del caricamento, sostituisce il documento che hai modificato.

Se esegui la tua modifica dal carico on-line dell’iframe, funzionerà su tutti i browser.

Ho testato questo codice con firefox e cioè e funziona. È necessario attendere il completamento del caricamento della pagina prima di modificare i contenuti. Ho usato l’evento di carico del corpo.