- ベストアンサー
iframeのソースを取得したい
いつもお世話になります。 物凄くまとめてしまってすみません。 window.onload = alert(document.getElementsByTagName("body")[0].getElementsByTagName("iframe")[0].contentWindow.document.innerHTML); というようなスクリプトを実行しているのですが、未定義(undifined)が表示されてしまいます。 もちろんbodyないにちゃんとしたsrcを指定したiframeはあります。 どのようにすればいいでしょうか。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
iframeはIEとMozilla(FireFoxなど)とで扱い方が異なりますので、ブラウザ判定が必須です。 var doc; // インラインフレームのドキュメント if (document.all) { // IE doc = frames[iframeのid].document; } else { // Mozilla doc = document.getElementById(iframeのid).contentDocument; } alert(doc.innerHTML); // iframe内のHTMLを表示 alert(doc.body.innerHTML); // body内のHTMLを表示 こんな感じでHTMLを取得できます。
その他の回答 (2)
document.getElementsBy('iframe')[0].contentWindow.length はfirefoxで0を返すので contentWindow.document.innerHTML はundifinedを返すのかな? document.getElementsByTagName('iframe')[0].innerHTML ではiframeタグ内のHTMLを返しますね。 frames[0].document.getElementsByTagName('*')[0].innerHTML でiframeで表示されているドキュメントの最初のタグ内のHTMLを返しますが、IE6ではdoctype宣言を!タグとするようなので少々不都合があるようです。 frames[0].document.getElementsByTagName('*')[0].nodeName を実行しますと#commentを返すのでたぶんコメントとしているのでしょう。 frames[0].document.getElementsByTagName('*')[0].nodeValue を実行するとその内容を返します。 から IE6では var souce = "" var obj = frames[0].document.getElementsByTagName('*') if(obj[0].tagName != "HTML"){ souce += '< ' + obj[0].nodeValue + '>' + '<html>' + obj[1].innerHTML + '</html>' }else{ souce += '<html>' + obj[0].innerHTML + '</html>' } alert(souce) とするとソースを返すかもしれません。
フレーム名を付けて参照したら? iframeは埋め込まれているけど親のhtml内じゃない扱いだから。 フレーム名が F1 だとして document.F1.getElemetsByTagName・・・・・・だと思う(未検証