3

「フレンドリーな 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 にアクセスできるものはありません。
4

1 に答える 1

0

これは古いことだと思いますが、クライアント側のソリューションに興味があり、この投稿に出くわしました。サーバー側を使用してこれを処理していますが、最後の手段としてサーバー側を使用しないのはなぜですか? 確かに、リファラーはサーバー側では大雑把ですが、iframe ページを扱う場合、リファラーはかなり信頼性が高く、ローカル アプリケーションのホストおよび参照アプリケーションと比較できます。

ASP.NET/C# で行った方法を次に示します (PHP などでも同じことができます)。

// set referrer
if (Request.UrlReferrer != null && Request.Url.Host != Request.UrlReferrer.Host)
{
    Session["Referrer"] = Request.UrlReferrer.OriginalString;
}
于 2013-05-23T23:35:00.800 に答える