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.
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:
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.
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:
N'oubliez pas d'accéder à iframe après son chargement . Moyen ancien mais fiable sans jQuery:
la source
CallYourFunction()
est la fonction à l'intérieur de la page et cette action de fonction sur ellela source
Les réponses ci-dessus ont donné de bonnes solutions en utilisant Javscript. Voici une solution jQuery simple:
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.
la source
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:
Ensuite, vous appelez cette fonction comme ceci pour récupérer l'élément:
la source
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:
la source
Le code ci-dessous vous aidera à découvrir les données iframe.
la source