有没有办法从单独域中的iframe中从顶部获取任何信息?有人要求我验证他们的广告不是像色情等一样的东西......但他们的广告总是在发布商网站上的iframe内。
有趣的是,当我将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在获取数据本身时实际上并不获取数据?
我能得到的任何信息都会比什么都好,所以请随意提出部分答案。感谢。
答案 0 :(得分:3)
是否可以使用相等语句,因为iframe在获取数据本身时实际上并没有获取数据?
这是一个古老的JavaScript怪癖,你可以随时获得跨域框架/ iframe / parent / opener的'window'对象。但是 - 出于明显的安全原因 - 您无法访问该对象的大多数成员。由于浏览器错误,过去偶尔会有一些方法来规避这些限制,但你无法依赖它们。
对于一个未知的窗口对象,你可以做的唯一事情就是检查它是否与其他已知窗口对象相同,例如当前窗口对象。
如果您想测试一个未知窗口是否至少在您自己的域内,您可以尝试访问otherwindow.location
块内的try...catch
。
有没有办法从单独域名的iframe中从顶部获取任何信息?
不,但您可以在HTTP服务器端记录“Referer”标题,以查看包含&lt; iframe&gt;的页面。但是你的广告网络当然应该为你做这件事吗?
if(window.top!== window.self)
好奇; window.self和window一样;我不知道为什么你会使用更长的版本。这个测试最短的成语是:
if (top!==self)
只要您没有定义任何其他名为“top”或“self”的变量,它就会起作用。
答案 1 :(得分:1)
不,没有。这是由于Cross-site scripting攻击造成的。