「フレンドリーな iframe」環境で、難しい iFrame 検出の問題に遭遇しました。window.topのどの外部ドメイン iframe 要素からwindow.top.document、同じドメイン、プロトコル、およびポートを持つ別の iframe をそれ自体の内部にロードするかを識別する必要がありますwindow.top。
中心的な質問は次のとおりです。ページ A で、iFrame B に iFrame C が含まれていることを JavaScript でどのように判断できますか? ここでも、ページ A と iFrame C は同じドメイン、プロトコル、およびポートに属しており、相互に通信できます。iFrame B は別のドメインにあります。ページ A の iFrame C に関連付けられている DOMElement を見つけたいです。
試したもののうまくいかなかった可能性のあること:
document.referrerマッチング。srcページ A は、ページ Aのすべての iframe の属性を iFrame C のプロパティに一致させますdocument.referrer。残念ながら、ページ A の複数の iframe が iframe B の同じ src を持つコンテンツをロードする場合、これは機能しません。srciframe B の はabout:blankまたはjavascript:somethingです。window.location.hashsrciframeの属性を見て通信します。window.location.hashページ Aは iFrame B を取得できないため、うまくいきません。- これは IE 6 および 7 で動作する必要があるため、 window.postMessage のサポートはありません。ごめん。
 
追加情報:
これは「Friendly iFrames」と呼ばれる構成です。Friendly iFrame (FIF) は、広告業界では一般的です。それらがどのように機能するかは次のとおりです。
パブリッシャー サイトのページ、たとえばページ A foo.com は、some-random-ad-server.com から iframe B を挿入します。次に、some-random-ad-server.com の iframe B 内で、別の iframe C が foo.com から読み込まれます。そう:
- iFrame C からページ A にアクセス (DOM 操作) できます。ページ A は iFrame C にアクセスできます。
 - ページ A または iFrame C には、iFrame B にアクセスできるものはありません。