66 votes

Comment puis-je accéder aux éléments d'une iframe avec Javascript ?

J'ai une page web où il y a une zone de texte dans une iframe. J'ai besoin de lire la valeur de cette zone de texte à partir de sa page enfant JavaScript. Actuellement, en utilisant window.parent.getelementbyID().value dans le JavaScript, je suis en mesure de récupérer les valeurs de tous les contrôles de la page parente, à l'exception de la zone de texte dans l'iframe.

L'identifiant et le nom du cadre de ma page parent changent au moment de l'exécution, nous ne pouvons donc pas utiliser l'identifiant et le nom du cadre comme référence.

2 votes

0 votes

@archana : La réponse de RaYell stackoverflow.com/questions/1451208/1451455#1451455 comprend un commentaire de la première fois où vous avez posé cette question. Si vous ne connaissez pas l'identifiant ou le nom du cadre, vous pouvez utiliser la méthode suivante document.frames[0].document.getElementById() (ou un autre index si ce n'est pas le premier <iframe> sur la page.

1 votes

80voto

meder Points 81864

Si vous avez le code HTML

<form name="formname" .... id="form-first">
    <iframe id="one" src="iframe2.html">
    </iframe>
</form>

et JavaScript

function iframeRef( frameRef ) {
    return frameRef.contentWindow
        ? frameRef.contentWindow.document
        : frameRef.contentDocument
}

var inside = iframeRef( document.getElementById('one') )

inside est maintenant une référence au document, donc vous pouvez faire getElementsByTagName('textarea') et ce que vous voulez, en fonction de ce qui se trouve dans la src de l'iframe.

0 votes

Juste un souci Meder-- var inside = iframeRef( document.getElementById('one') ) Le frameid et le framename de ma page changent en cours d'exécution, donc il ne sera pas possible de passer le frameid (comme vous l'avez fait). Existe-t-il une autre alternative ?

0 votes

Oui. getElementsByTagName('iframe') pour faire référence à une nodeList et accéder aux éléments à l'intérieur avec [0], en supposant que vous en traitiez un. ou vous pouvez faire une boucle.

0 votes

Merci Meder. Juste une autre question : quelle est la différence entre " frameRef.contentWindow.document " et " frameRef.contentDocument " ? Je veux comprendre le concept derrière tout cela. Ce serait vraiment bien de votre part, si vous l'expliquiez un peu. Merci beaucoup pour votre aide.

19voto

Doug Amos Points 1079

Avec jQuery, vous pouvez utiliser contents() . Par exemple :

var inside = $('#one').contents();

16 votes

Une considération importante ici est que la méthode contents peut "obtenir le document de contenu d'un iframe, si l'iframe est sur le même domaine que la page principale".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X