web-dev-qa-db-fra.com

Accéder aux éléments iframe en JavaScript

J'ai une page Web où il y a une zone de texte dans un iframe. J'ai besoin de lire la valeur de cette zone de texte depuis sa page enfant en utilisant JavaScript.

Actuellement, en utilisant window.parent.getelementbyID().value dans le JavaScript, je suis capable de récupérer les valeurs de tous les contrôles de la page parent, à l'exception de la zone de texte dans l'iframe.

Quelqu'un peut-il me donner des conseils pour résoudre ce problème?

26
archana roy

Si votre iframe appartient au même domaine que votre page parent, vous pouvez accéder aux éléments à l'aide de document.frames collection.

// replace myIFrame with your iFrame id
// replace myIFrameElemId with your iFrame's element id
// you can work on document.frames['myIFrame'].document like you are working on
// normal document object in JS
window.frames['myIFrame'].document.getElementById('myIFrameElemId')

Si votre iframe n'est pas dans le même domaine, le navigateur doit empêcher cet accès pour des raisons de sécurité.

51
RaYell

Vous devez accéder aux cadres depuis window et non document

window.frames['myIFrame'].document.getElementById('myIFrameElemId')
15
Mena Joseph

window.frames['myIFrame'].document.getElementById('myIFrameElemId')

ne fonctionne pas pour moi mais j'ai trouvé une autre solution. Utilisation:

window.frames['myIFrame'].contentDocument.getElementById('myIFrameElemId')

Je l'ai vérifié sur Firefox et Chrome.

14
user964357

Assurez-vous que votre iframe est déjà chargé. Moyen ancien mais fiable sans jQuery:

<iframe src="samedomain.com/page.htm" id="iframe" onload="access()"></iframe>

<script>
function access() {
   var iframe = document.getElementById("iframe");
   var innerDoc = iframe.contentDocument || iframe.contentWindow.document;
   console.log(innerDoc.body);
}
</script>
3
lukyer

ce code a fonctionné pour moi:

window.frames['myIFrame'].contentDocument.getElementById('myIFrameElemId');

Deux façons

window.frames['myIFrame'].contentDocument.getElementById('myIFrameElemId')

OR

window.frames['myIFrame'].contentWindow.document.getElementById('myIFrameElemId')
1
Vlad