85 votes

Comment sélectionner un élément à l'intérieur d'une iframe en utilisant document.getElementById

Tengo un iframe comme ceci

<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 façons, mais je n'ai pas trouvé de solution.

194voto

Fabrício Matté Points 26309
document.getElementById('myframe1').contentWindow.document.getElementById('x')

Violon

contentWindow est pris en charge par tous les navigateurs, y compris les anciennes versions d'IE.

Il convient de noter que si le iframe 's src provient d'un autre domaine, vous ne pourrez pas accéder à son contenu en raison de l'existence d'un Politique de la même origine .

23voto

DON Points 2555

Utiliser 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");

5voto

Pat Points 213

(pour compléter la réponse choisie)

Assurez-vous que le iframe est chargé avant que vous ne le fassiez.

contentWindow.document

Dans le cas contraire, votre getElementById sera null .

PS : Je ne peux pas commenter, car ma réputation est encore faible, mais il s'agit d'un suivi de la réponse choisie, car j'ai passé du temps à déboguer pour savoir si je devais forcer l'utilisation de l'outil de gestion de l'information. iframe avant de sélectionner l'élément inner-iframe.

1voto

Vous devez vous assurer que le cadre est entièrement chargé. la meilleure façon de le faire est d'utiliser onload :

<iframe id="nesgt" src="" onload="custom()"></iframe>

function custom(){
    document.getElementById("nesgt").contentWindow.document;
    }

cette fonction s'exécutera automatiquement lorsque l'iframe sera entièrement chargée.

0voto

Divyanshu Rawat Points 383

Dans mon cas, j'essayais de saisir pdfTron mais malheureusement sa barre d'outils ID change à chaque fois que vous actualisez la page.

C'est ainsi que j'ai fini par l'attraper.

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.

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