2009-04-06 7 views
1

C'est le iframe J'essaie d'accéder:Firefox ne peut trouver iframe

<div class="mceBody" id="additionalTxt_b"> 
     <iframe frameborder="0" id="additionalTxt_f" src='javascript:""' class="punymce"/> 
</div> 

En utilisant cette ligne:

frames['additionalTxt_f'].document.getElementsByTagName("body")[0].innerHTML 

Pour une raison quelconque, je reçois « frames.additionalTxt_f est undefined "de firebug. J'ai des iframes similaires (créés dynamiquement par punyMCE plugin) sur d'autres pages, et ils fonctionnent parfaitement bien. Et IE7/8 n'a aucun problème à accéder à cette iframe non plus.

Juste à perte complète ici. Des idées sur pourquoi Firefox ne peut pas trouver l'iframe?

Répondre

8

Le tableau window.frames[] est indexé par l'attribut name de la trame [i] (également appelée cible de trame). id ne peut pas être invoqué pour travailler également - bien qu'il puisse dans IE < 8, qui pense souvent que les noms et les ids sont la même chose.

Si vous souhaitez accéder à un contenu de cadre par ID, utilisez le DOM niveau 2 HTML contentDocument propriété au lieu de l'ancienne école (« DOM niveau 0 ») array frames:

document.getElementById('additionalTxt_f').contentDocument.body.innerHTML 

... mais puis, pour la compatibilité avec IE < 8, vous devez également ajouter quelques cochonneries fallback, car il ne supporte pas contentDocument:

var f= document.getElementById('additionalTxt_f'); 
var d= f.contentDocument? f.contentDocument : f.contentWindow.document; 
d.body.innerHTML 

il est donc à vous la méthode que vous pensez est moins laid: le travail de script supplémentaire , o r juste en utilisant l'attribut name.

+0

Merci. Cela fonctionne parfaitement. Et avec cela, j'ai encore trouvé un autre bug avec pumyMCE, car il n'a pas ajouté l'attribut name à l'iframe. – peirix

+0

Eh bien ... 'bug' peut être surchargé, il n'y a pas d'exigence particulière pour inclure un attribut 'name'. Certaines personnes préfèrent 'name', d'autres' id' (et il est concevable que vous ne le vouliez pas non plus). – bobince

+1

oh. juste un peu en tête. Dans la si-phrase, il est supposé être f.contentWindow, pas d.contentWindow ... juste trouvé le type-o maintenant, car il a produit une erreur dans IE6. – peirix

1

si vous avez seulement 1 iframe vous pouvez également trouver avec window.frames [1] ou document.getElementsByTagName ('iframe') [0]

(Dans la première option, la fenêtre parent est # 0)

Questions connexes