アプリ版:「スタンプのみでお礼する」機能のリリースについて

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

A 回答 (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を取得できます。
    • good
    • 0

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

フレーム名を付けて参照したら?


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

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!