98 votes

Obtenez le document d'IFrame, à partir de JavaScript dans le document principal

J'ai ce code HTML :

 <html>
  <head>
    <script type="text/javascript">
      function GetDoc(x)
      {
        return x.document ||
          x.contentDocument ||
          x.contentWindow.document;
      }

      function DoStuff()
      {
        var fr = document.all["myframe"];
        while(fr.ariaBusy) { }
        var doc = GetDoc(fr);
        if (doc == document)
          alert("Bad");
        else 
          alert("Good");
      }
    </script>
  </head>
  <body>
    <iframe id="myframe" src="http://example.com" width="100%" height="100%" onload="DoStuff()"></iframe>
  </body>
</html>

Le problème est que je reçois le message "Mauvais". Cela signifie que le document de l'iframe n'est pas obtenu correctement et que la fonction GetDoc retourne en fait le document parent.

Je serais reconnaissant, si vous disiez où je fais mon erreur. (Je souhaite que le document soit hébergé dans IFrame.)

Merci.

197voto

pkaeding Points 12935

Vous devriez pouvoir accéder au document dans l'IFRAME à l'aide du code suivant :

 document.getElementById('myframe').contentWindow.document

Cependant, vous ne pourrez pas le faire si la page dans le cadre est chargée à partir d'un domaine différent (tel que google.com). Cela est dû à la politique de même origine du navigateur.

17voto

Tim Down Points 124501

Le problème est que dans IE (qui est ce que je présume que vous testez en), le <iframe> élément a document la propriété qui fait référence au document contenant l'iframe, et c'est s'habituer avant les propriétés contentDocument ou contentWindow.document Ce dont vous avez besoin c'est :

 function GetDoc(x) {
    return x.contentDocument || x.contentWindow.document;
}

De plus, document.all n'est pas disponible dans tous les navigateurs et n'est pas standard. Utilisez plutôt document.getElementById()

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