2009-04-14 77 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