[JavaScript] フレームの扱い

【2012年10月31日更新】

tips

  • すべてのフレームのWindowオブジェクトはwindow.frames配列に入っている
    • インラインフレーム(iframe)も含まれている
    • framesに入っているのは、各フレームのWindowオブジェクト。Frame#contentWindowで取得できるものと同じ。Frameオブジェクトそのものではないので要注意。
  • framesはオブジェクト(ハッシュ)にもなっていて、frame要素のid値でアクセスできる
    • frames[“id"]
  • Frameオブジェクトそのものを取りたい場合は、getElementsByTagName()などでframe、iframeを直接指定して取得する

フレームが外部ドメインのページを表示している場合、そのFrameオブジェクトのプロパティにアクセスしようとするとクロスドメインの問題で例外が出るので、try…catch構文で囲っておく。

try {
	window.frames[0].document;
}catch (e) {
	
}

フレームを使ったページの場合、グローバルのdocumentオブジェクトを操作しても変化がない。いずれかのFrameオブジェクトのbodyなどを操作する必要がある。

ブックマークレットをつくる際などに注意。

var elm.createElement("div");
document.body.appendChild(elm); // 変化がない
window.frames[0].document.body.appendChild(elm);

JavaScript

Posted by takasho