J'ai un iframe
comme celui-ci
<iframe name="myframe1" id="myframe1" width="100%" height="100%" src="a.html">
<html>
<head></head>
<frameset name="myframe2" cols="0%, 100%" border="0" frameBorder="0" frameSpacing="0">
<frame name="page1" src="c.html" scrolling="no"></frame>
<frame name="page2" src="d.html" >
<html>
<head></head>
<body id="top">
<div id="div1">
<div id="div2">
<div id="div3">
<ul id="x">
<li>a</li>
<li>b</li>
</ul>
</div>
</div>
</div>
</body>
</html>
</frame>
</frameset>
</html>
</iframe>
Je veux faire référence à l'élément "x". J'ai essayé de plusieurs manières mais je n'ai pas pu trouver de solution.
document.getElementById('myframe1').contentWindow.document.getElementById('x')
contentWindow
est pris en charge par tous les navigateurs, y compris les anciennes versions de IE.
Notez que si iframe
'src
provient d'un autre domaine, vous ne pourrez pas accéder à son contenu en raison de politique de même origine .
utilisez contentDocument
pour y parvenir
var iframe = document.getElementById('iframeId');
var innerDoc = (iframe.contentDocument)
? iframe.contentDocument
: iframe.contentWindow.document;
var ulObj = innerDoc.getElementById("ID_TO_SEARCH");
(ceci est à ajouter à la réponse choisie)
Assurez-vous que le iframe
est chargé avant de
contentWindow.document
Sinon, votre getElementById
sera null
.
PS: Je ne peux pas commenter, réputation encore faible à commenter, mais il s’agit d’un suivi de la réponse choisie, car j’ai passé du bon temps de débogage à essayer de comprendre que je devrais forcer le chargement de iframe
avant de sélectionner l'élément inner-iframe.
Dans mon cas, j'essayais de saisir la barre d'outils pdfTron, mais malheureusement, son ID change chaque fois que vous actualisez la page.
Alors, j'ai fini par l'attraper en le faisant.
const pdfToolbar = document.getElementsByTagName('iframe')[0].contentWindow.document.getElementById('HeaderItems');
Comme dans le tableau écrit par tagName, vous aurez toujours l'index fixe pour les iFrames dans votre application.