2012-07-04 4 views
0

je produis un iFrame dynamique comme celui-cirendu iFrame dynamiquement dans Firefox

var iframe=document.createElement('iframe'); 
document.body.appendChild(iframe); 
var iframedoc=iframe.contentDocument||iframe.contentWindow.document; 
iframedoc.body.innerHTML="HI"; 

Fiddle: http://jsfiddle.net/Pbj7S/

Il fonctionne dans Google Chrome, Opera, Safari, mais pas dans Firefox.

Une idée pourquoi?

Répondre

2

Cela fonctionne:

var iframe=document.createElement('iframe'); 
document.body.appendChild(iframe); 
setTimeout(function(){ 
    var iframedoc=iframe.contentDocument||iframe.contentWindow.document; 
    iframedoc.body.innerHTML="HI"; 
}, 10); 

Le problème est que vous essayez d'accéder au document iframe avant qu'il ne soit disponible dans les DOM. Le délai n'est pas important, le point important est que les navigateurs mettent à jour l'affichage (et certains objets accessibles dans le cas de Firefox) seulement après que le thread js ait fini de fonctionner.

+1

Y a-t-il un moyen plus sûr ('onload' peut-être?). Parce qu'avec un ordinateur TRÈS lent, ça ne marchera pas. – user1365010

+0

Je pense que c'est OK: le point important n'est pas vraiment le retard mais le fait que le thread javascript s'arrête et donc que le navigateur soit autorisé à gérer les conséquences de la modification du DOM. Je l'ai testé avec un retard de 1 (milliseconde). –

+0

Même '0' fonctionne! – user1365010