web-dev-qa-db-fra.com

Obtenir le document 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 "Bad". Cela signifie que le document d'iframe n'est pas obtenu correctement et que ce qui est retourné par la fonction GetDoc est le document parent.

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

Merci.

56
user175908

Vous devriez pouvoir accéder au document dans IFRAME en utilisant le code suivant:

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

Toutefois, vous ne pourrez pas le faire si la page du cadre est chargée à partir d'un autre domaine (tel que google.com). Ceci est dû au fait que le navigateur politique de même origine .

121
pkaeding

Le problème est que dans IE (ce que je suppose que vous testez)), l'élément <iframe> A une propriété document qui fait référence au document. contenant l'iframe, et ceci est utilisé avant les propriétés contentDocument ou contentWindow.document.

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 document.getElementById() à la place.

14
Tim Down