56

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

ページAで実行されるgreasemonkeyスクリプトがあります。greasemonkeyスクリプトは、ページAがiframeコンテキスト内にあるかどうかをどのように検出できますか?

4

5 に答える 5

132

ページA自体にフレームがある場合、フレームの長さを見ると一般的に分類されます(この特定のインスタンスには当てはまらない可能性があることを私は知っています)。より信頼性が高く意味のあるテストは次のようになります。

if (window!=window.top) { /* I'm in a frame! */ }
于 2009-05-29T09:04:59.643 に答える
12

述語

(window.parent.frames.length > 0)

あなたが欲しいものだけを教えてくれます。

于 2009-05-29T08:51:32.823 に答える
6
if (top === self) { not in a frame } else { in a frame }

Webページがiframe内にロードされているのか、ブラウザウィンドウに直接ロードされているのかを識別する方法は?

于 2011-08-22T15:54:55.057 に答える
4

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

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

于 2013-07-05T14:38:18.013 に答える
0

window.frameElementnullでないかどうか、およびnodeNameが「IFRAME」であるかどうかを使用して確認します。

于 2012-06-11T11:06:43.010 に答える