element.ownerDocument.defaultView.frameElement
トラバーサルについて
frame内のwindowの参照
いくつか方法があるが、windowから子windowへの移動はしにくい。 一旦frame要素を経由する方がよい。
直接windowに移動する場合
- window.nameはグローバル変数と衝突する
- 数字ではどのwindowを参照しているのか分かりにくい
window.foo // グローバル変数と衝突 window[n] window.frames[n] // window.frames === window が古いIE以外trueになる。 // もはや使う意味が無さそう?
一旦frame要素を経由する場合
var iframe = document.querySelector("iframe[name='foo']") , win = frame.contentWindow || frame.contentDocument.defaultView
要素とwindow
// 要素からwindow el.ownerDocument.defaultView el.ownerDocument.parentWindow // IE8以下はparentWindow // window.topの要素か <-> iframe内の要素か ! el.ownerDocument.defaultView.frameElement // null or true
tips
- スクリプトの実行されるコンテキストを意識しないと混乱する
- topからフレーム
- フレームから他のフレーム
window.window
,window.document
はwindow.alert
などと同じように、普段はwindowを省略していると考えられる。