特定のページを持つアプリケーションがあります。これをページAと呼びましょう。ページAはトップレベルのページである場合もありますが、ページB内にiframeとして埋め込まれている場合もあります。すべてのページは同じサーバーからのものであり、クロスドメインの問題。
ページAで実行されるgreasemonkeyスクリプトがあります。greasemonkeyスクリプトは、ページAがiframeコンテキスト内にあるかどうかをどのように検出できますか?
特定のページを持つアプリケーションがあります。これをページAと呼びましょう。ページAはトップレベルのページである場合もありますが、ページB内にiframeとして埋め込まれている場合もあります。すべてのページは同じサーバーからのものであり、クロスドメインの問題。
ページAで実行されるgreasemonkeyスクリプトがあります。greasemonkeyスクリプトは、ページAがiframeコンテキスト内にあるかどうかをどのように検出できますか?
ページ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 }
Webページがiframe内にロードされているのか、ブラウザウィンドウに直接ロードされているのかを識別する方法は?
上記のように、受け入れられたソリューションはIE8では機能しません。さらに、チェックwindow.parent.frames.length
するとクロスドメイン例外が発生する可能性があります。
代わりに、私はこれを達成することができましたvar isInIFrame = top.location != self.location
-それはIE8で動作し、の内容を読み取ろうとしない限り、クロスドメイン違反を引き起こしませんtop.location
。
window.frameElement
nullでないかどうか、およびnodeNameが「IFRAME」であるかどうかを使用して確認します。