web-dev-qa-db-ja.com

メインドキュメントのJavaScriptからIFrameのドキュメントを取得する

私はこの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でホストしたいです。)

ありがとうございました。

56
user175908

次のコードを使用して、IFRAMEのドキュメントにアクセスできるはずです。

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

ただし、フレーム内のページが別のドメイン(google.comなど)から読み込まれている場合、これを行うことはできません。これは、ブラウザの Same Origin Policy が原因です。

121
pkaeding

問題は、IE(これはあなたがテストしていると推測されるものです)、_<iframe>_要素にdocumentプロパティがあり、 iframe、これはcontentDocumentまたは_contentWindow.document_プロパティの前に使用されるようになりました。

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

また、_document.all_はすべてのブラウザで使用できるわけではなく、非標準です。代わりにdocument.getElementById()を使用してください。

14
Tim Down