Récupérer un élément depuis un iFrame


Réponses:


382
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;

Vous pourriez plus simplement écrire:

var iframe = document.getElementById('iframeId');
var innerDoc = iframe.contentDocument || iframe.contentWindow.document;

et le premier document interne valide sera retourné.

Une fois que vous avez obtenu le document interne, vous pouvez simplement accéder à ses éléments internes de la même manière que vous accéderiez à n'importe quel élément de votre page actuelle. ( innerDoc.getElementById... etc.)

IMPORTANT: assurez-vous que l'iframe se trouve sur le même domaine, sinon vous ne pourrez pas accéder à ses éléments internes. Ce serait un script intersite.


4
Très bonne réponse. Saviez-vous que vous pouvez faire: var innerDoc = iframe.contentDocument || iframe.contentWindow.document; // plus lisible et signifie la même chose
— David Snabel-Caunt

5
J'ai vu des gens plus confus que des opérateurs ternaires. Ils semblent ne pas savoir que le premier valide est retourné.
— geowa4

5
en fait, alors que je modifiais la réponse pour l'inclure, le gars par-dessus mon épaule m'a demandé ce que cela faisait ...
— geowa4

12
Il vaut probablement mieux éduquer que d'utiliser un code plus complexe pour plus de simplicité :)
— David Snabel-Caunt

1
@JellicleCat: Toute façon de contourner ce problème est une façon de faire une "falsification de demande intersite", également connue sous le nom d'attaque "en un clic" ou de "session de session"
— CSharper

12

N'oubliez pas d'accéder à iframe après son chargement . 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
window.parent.document.getElementById("framekit").contentWindow.CallYourFunction('pass your value')

CallYourFunction() est la fonction à l'intérieur de la page et cette action de fonction sur elle


5
Cela appelle une fonction à partir d'un iFrame, sans obtenir de référence à l'élément.
— Nick Mitchell

3

Les réponses ci-dessus ont donné de bonnes solutions en utilisant Javscript. Voici une solution jQuery simple:

$('#iframeId').contents().find('div')

L'astuce ici est la .contents()méthode de jQuery , contrairement à .children()ce qui ne peut obtenir que des éléments HTML, .contents()peut obtenir à la fois des nœuds de texte et des éléments HTML. C'est pourquoi on peut obtenir le contenu d'un document iframe en l'utilisant.

Pour en savoir plus sur jQuery .contents(): .contents ()

Notez que l'iframe et la page doivent être sur le même domaine.


1

Aucune des autres réponses ne fonctionnait pour moi. J'ai fini par créer une fonction dans mon iframe qui renvoie l'objet que je cherchais:

function getElementWithinIframe() {
    return document.getElementById('copy-sheet-form');
}

Ensuite, vous appelez cette fonction comme ceci pour récupérer l'élément:

var el = document.getElementById("iframeId").contentWindow.functionNameToCall();

0

Si l'iframe n'est pas dans le même domaine, de sorte que vous ne pouvez pas accéder à ses éléments internes à partir du parent, mais vous pouvez modifier le code source de l'iframe, vous pouvez modifier la page affichée par l'iframe pour envoyer des messages à la fenêtre parent, ce qui permet vous de partager des informations entre les pages. Quelques sources:


-3

Le code ci-dessous vous aidera à découvrir les données iframe.

let iframe = document.getElementById('frameId');
let innerDoc = iframe.contentDocument || iframe.contentWindow.document;
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.