2009-04-14 106 views
2

有沒有辦法在獨立域的iframe中從頂部獲取任何信息?有人責令我確認他們的廣告不是像色情等等的東西,但是他們的廣告總是在發佈商網站的iframe中。從iframe中獲取頂級href和innerHTML

有趣的是,當我把twitter.com的iframe,他們有iFrame突破技術開啓 - 就像這樣:

<script type="text/javascript"> 
//<![CDATA[ 
    if (window.top !== window.self) { setTimeout(function(){document.body.innerHTML='';},1);window.self.onload=function(evt){document.body.innerHTML='';};} 
//]]> 
</script> 

什麼打動我的是,作爲一個不同的領域,他們仍然有能力得到window.top。然而,當我嘗試擴展這個功能window.top.location或window.top.href獲取頂級窗口的URL,我得到

uncaught exception: [Exception... "Component returned failure code: 0x8007000e (NS_ERROR_OUT_OF_MEMORY) [nsIDOMNSHTMLDocument.write]" nsresult: "0x8007000e (NS_ERROR_OUT_OF_MEMORY)" location: "JS frame :: http://tester.tester.com/iframe3.html :: <TOP_LEVEL> :: line 9" data: no] 
http://tester.tester.com/iframe3.html 
Line 9 

這真的僅僅是被誤報權限錯誤由Gecko(我認爲)。

對此有何看法?是否有可用的平等聲明,因爲iframe實際上沒有獲取數據,而獲取數據本身不可用?

我能得到的任何信息都會比沒有好,所以請隨時提供部分答案。謝謝。

回答

3

是否有可用的等式語句,因爲iframe在獲取數據本身不可用時實際上沒有獲取數據?

這是一個古老的JavaScript怪癖,您可以隨時獲得跨域框架/ iframe/parent/opener的'窗口'對象。但是 - 出於明顯的安全原因 - 您無法訪問該對象的大多數成員。由於瀏覽器錯誤,有時候有辦法繞過這些限制,但是沒有什麼可以依賴的。

對於一個未知的窗口對象,你可以做的唯一有用的事情就是檢查它是否與其他已知窗口對象(如當前窗口對象)是同一個對象。

如果要測試未知窗口是否至少位於您自己的域中,則可以嘗試訪問try...catch塊內的otherwindow.location

有沒有什麼辦法從獨立域上的iframe中獲取頂部的任何信息?

不,但您可以在HTTP服務器端記錄'Referer'標頭,以查看哪個頁面包含了iframe> < iframe>。但是無論如何,你的廣告網絡肯定會爲你做到這一點?

如果(window.top == window.self!)

好奇; window.self與window一樣;我不知道爲什麼你會使用更長的版本。此測試的最短成語是:

if (top!==self) 

只要你不定義任何其他變量的稱爲「頂」或「自我」的工作。

+0

不幸的是,我們要投放的廣告已經在iframe中,所以我們在iframe上下了兩層。其他一切都非常有幫助。謝謝! – 2009-04-14 19:34:02