特定のページを持つアプリケーションがあります。ページAと呼びましょう。ページAはトップレベルのページである場合もありますが、ページB内にiframeとして埋め込まれている場合もあります。すべてのページは同じサーバーから来ており、クロスドメインの問題。
私は、ページAの実行がどのようにグリースモンキースクリプトは、ページAはIFRAMEコンテキスト内にあるかどうかを検出することができるGreasemonkeyのスクリプトを持っていますか?
ページA自体にフレームがある場合、フレームの長さを見ると、一般的に壊れます(この特定のインスタンスには当てはまらないかもしれません)。より信頼性と意味のあるテストは次のようになります。
if (window!=window.top) { /* I'm in a frame! */ }
述語
(window.parent.frames.length > 0)
あなたが望むものだけを教えてくれます。
if (top === self) { not in a frame } else { in a frame }
From Webページがiframe内に読み込まれているのか、ブラウザウィンドウに直接読み込まれているのかを識別する方法
上記のように、受け入れられたソリューションはIE8では機能しません。さらに、window.parent.frames.length
をチェックすると、クロスドメイン例外が発生する可能性があります。
代わりにvar isInIFrame = top.location != self.location
でこれを達成できました。IE8で動作し、top.location
の内容を読み取ろうとしない限り、クロスドメイン違反は発生しません。
使用する window.frameElement
そして、それがnullでないか、そのnodeNameが「IFRAME」であるかどうかを確認します。