Получить документ IFrame из JavaScript в основном документе - PullRequest
55 голосов
/ 22 октября 2010

У меня есть этот 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>

Проблема в том, что я получаю сообщение "Плохо".Это означает, что документ iframe получен неправильно, и то, что фактически возвращается функцией GetDoc, является родительским документом.

Я был бы благодарен, если бы вы сказали, где я делаю свою ошибку.(Я хочу, чтобы документ размещался в IFrame.)

Спасибо.

Ответы [ 2 ]

118 голосов
/ 22 октября 2010

Вы должны иметь возможность доступа к документу в IFRAME, используя следующий код:

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

Однако вы не сможете этого сделать, если страница во фрейме загружена из другого домена (например, google.com). Это из-за того, что браузер Одинаковая политика происхождения .

14 голосов
/ 22 октября 2010

Проблема в том, что в IE (что, как я предполагаю, вы тестируете), элемент <iframe> имеет свойство document, которое ссылается на документ, содержащий iframe, и это используется перед 1003 * или contentWindow.document свойства. Что вам нужно это:

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

Кроме того, document.all доступен не во всех браузерах и является нестандартным. Вместо этого используйте document.getElementById().

...