2

空の iframe を含むページを作成しました。次に、iframe ドキュメントを選択して、その本文に移動できます。

var iframe = document.getElementsByTagName('iframe')[0];
var doc = iframe.contentDocument || iframe.contentWindow.document;
var body = doc.body;
console.log("Body is", body);

firefox と chrome では、これにより body オブジェクトが得られます。IE10ではnullになります。

これは、この問題を示す Jsbin です。JS、コンソール、出力パネルを開き、「Run With JS」をクリックします。

2 つの質問:

  1. クロスブラウザで iframe の本体にアクセスするにはどうすればよいですか?
  2. 正しい "to-spec" 動作はどれですか?
4

3 に答える 3

6

今日も同じような問題がありました。IE、少なくとも9と10は、iframe本体を正しく作成していないようです(開発者ツールを使用したとき、iframe内に本体タグを表示できましたが、呼び出すことができなかったようです)。指定されたsrcはありません。それが存在しないので、それはあなたにnullを与えます。

iframeの本体にアクセスするためのクロスブラウザ方式があるかどうかに対する答えはノーです。ただし、回避策を使用できます。まず、iframe本体が存在するかどうかを確認し、存在しない場合は作成します。

コードは次のようになります。

var iframe = document.getElementsByTagName('iframe')[0];
var doc = iframe.contentDocument || iframe.contentWindow.document;

// The workaround
if (doc.body == null) {       // null in IE
    doc.write("<body></body>");
}

var body = doc.body;
console.log("Body is", body);

ソース: http: //forums.asp.net/t/1686774.aspx/1

于 2013-03-02T00:50:18.353 に答える
0

1年以上経ちましたが、解決策は電話することだったと思います

doc.open()
//make any modifications
doc.close()
//at this point doc.body will not be null

これにより、ブラウザ間でかなり一貫した方法で動作するようになりました

于 2014-04-28T19:34:33.447 に答える
0

このコードはクロスブラウザで機能しています:

var doc=ifr.contentWindow||ifr.contentDocument;
if (doc.document) doc=doc.document;
var body=doc.getElementByTagName("body")[0];
于 2013-03-02T01:15:53.193 に答える