web-dev-qa-db-ja.com

JavaScriptに埋め込まれたiFrameを検出する

特定のページを持つアプリケーションがあります。ページAと呼びましょう。ページAはトップレベルのページである場合もありますが、ページB内にiframeとして埋め込まれている場合もあります。すべてのページは同じサーバーから来ており、クロスドメインの問題。

私は、ページAの実行がどのようにグリースモンキースクリプトは、ページAはIFRAMEコンテキスト内にあるかどうかを検出することができるGreasemonkeyのスクリプトを持っていますか?

53
Cheekysoft

ページA自体にフレームがある場合、フレームの長さを見ると、一般的に壊れます(この特定のインスタンスには当てはまらないかもしれません)。より信頼性と意味のあるテストは次のようになります。

if (window!=window.top) { /* I'm in a frame! */ }
125
annakata

述語

(window.parent.frames.length > 0)

あなたが望むものだけを教えてくれます。

11
Artem Barger
6
Mike Grace

上記のように、受け入れられたソリューションはIE8では機能しません。さらに、window.parent.frames.lengthをチェックすると、クロスドメイン例外が発生する可能性があります。

代わりにvar isInIFrame = top.location != self.locationでこれを達成できました。IE8で動作し、top.locationの内容を読み取ろうとしない限り、クロスドメイン違反は発生しません。

4
zachberry

使用する window.frameElementそして、それがnullでないか、そのnodeNameが「IFRAME」であるかどうかを確認します。

0
Pink Duck