我在「友好的iframe」環境中遇到了具有挑戰性的iFrame檢測問題。我需要從window.top
中識別出window.top.document
中的哪個外部域iframe元素加載到本身內部,而另一個iframe具有與window.top
相同的域,協議和端口。「友好iFrame」檢測:如何在首頁中查找嵌套的iframe?
所以,這裏的中心問題:在頁面A上,如何確定JavaScript中的iFrame B包含iFrame C?此外,Page A和iFrame C具有相同的域,協議和端口,並且可以相互通信。 iFrame B在不同的域上。我想找到一個與iFrame的C對頁A.相關
曾出現過可能的事情,沒有工作的一個DOMElement:
document.referrer
匹配。頁面A將頁面A上的所有iframe的src
屬性與iFrame C中的document.referrer
屬性相匹配。不幸的是,如果頁面A上的多個iframe使用iframe B上的相同src加載內容,則這不起作用。它也不起作用if iframe B的src
屬性是about:blank
或javascript:something
。window.location.hash
通過查看iframe的src
屬性進行通信。頁面A無法獲得iFrame B的window.location.hash
,因此沒有運氣。- 這已經在IE 6和7中工作,所以有沒有 window.postMessage支持。抱歉。
附加信息:
這是一種被稱爲 「易用的iframe」 構造。友好的iFrames(FIF)在廣告行業中很常見。以下是它們的工作方式:
發佈商網站上的一個頁面,例如Page Foo.com,它從some-random-ad-server.com注入iframe B.然後在some-random-ad-server.com上的iframe B中,另一個iframe C從foo.com加載。所以:
- 我有機會(即DOM操作)網頁A與iframe C.頁A可以訪問的iFrame C.
- 沒有瀏覽的網頁或iframe C具有訪問的iFrame B.