「フレンドリーな 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 を持つコンテンツをロードする場合、これは機能しません。src
iframe B の はabout:blank
またはjavascript:something
です。window.location.hash
src
iframeの属性を見て通信します。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 にアクセスできるものはありません。