gpt4 book ai didi

javascript - 从 iframe 中获取顶级 href 和 innerHTML

转载 作者:行者123 更新时间:2023-11-29 18:37:55 26 4
gpt4 key购买 nike

有没有办法从单独域的 iframe 中获取顶部的任何信息?有人委托(delegate)我验证他们的广告是否与色情等内容相邻...但他们的广告始终位于发布商网站的 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 实际上不获取数据而获取数据本身不可用,是否存在相等声明?

我能得到的任何信息总比没有好,所以请随意输入部分答案。谢谢。

最佳答案

Is an equality statement available because the iframe doesn't actually get the data while getting the data itself is not available?

这是 JavaScript 的一个古老怪癖,你总是可以获得跨域 frame/iframe/parent/opener 的“window”对象。但是⟩—⟩出于明显的安全原因⟩—⟩您无法访问该对象的大多数成员。由于浏览器错误,过去偶尔有一些方法可以规避这些限制,但没有什么可以依赖的。

对于未知窗口对象,几乎唯一有用的事情就是检查它是否与其他已知窗口对象(例如当前窗口对象)相同。

如果你想测试一个未知窗口是否至少在你自己的域内,你可以尝试在 try...catch block 中访问 otherwindow.location .

Is there any way to grab any information from the top from within an iframe on a separate domain?

没有,但是你可以在HTTP服务器端记录‘Referer’头,看看哪个页面包含了<iframe>。但无论如何,您的广告网络应该已经为您做这件事了吧?

if (window.top !== window.self)

好奇; window.self 和 window 是一样的东西;我不知道你为什么要使用更长的版本。这个测试的最短习语是:

if (top!==self)

只要您没有定义任何其他名为“top”或“self”的变量,它就可以工作。

关于javascript - 从 iframe 中获取顶级 href 和 innerHTML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/748873/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com