みんなの「教えて(疑問・質問)」にみんなで「答える」Q&Aコミュニティ

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

iframeのソースを取得したい

いつもお世話になります。
物凄くまとめてしまってすみません。
window.onload = alert(document.getElementsByTagName("body")[0].getElementsByTagName("iframe")[0].contentWindow.document.innerHTML);
というようなスクリプトを実行しているのですが、未定義(undifined)が表示されてしまいます。
もちろんbodyないにちゃんとしたsrcを指定したiframeはあります。
どのようにすればいいでしょうか。
よろしくお願いします。

投稿日時 - 2006-12-02 01:19:00

QNo.2575056

困ってます

質問者が選んだベストアンサー

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を取得できます。

投稿日時 - 2006-12-02 18:30:29

ANo.3

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(3)

ANo.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)
とするとソースを返すかもしれません。

投稿日時 - 2006-12-02 10:21:38

ANo.1

フレーム名を付けて参照したら?
iframeは埋め込まれているけど親のhtml内じゃない扱いだから。
フレーム名が F1 だとして
document.F1.getElemetsByTagName・・・・・・だと思う(未検証

投稿日時 - 2006-12-02 02:58:06

あなたにオススメの質問