javascript - 从 iframe 中获取 top href 和innerHTML

标签 javascript jquery css iframe

有没有办法从单独域的 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 的一个古老的怪癖,你总是可以获取跨域框架/iframe/parent/opener 的“窗口”对象。但是 — 出于明显的安全原因 — 您无法访问该对象的大多数成员。过去,由于浏览器错误,偶尔会有一些方法可以规避这些限制,但没有什么可以信赖的。

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

如果您想测试未知窗口是否至少位于您自己的域内,您可以尝试访问 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” header ,以查看哪个页面包含 <iframe>。但无论如何,您的广告网络肯定应该已经为您做这件事了吗?

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

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

if (top!==self)

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

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

相关文章:

jquery - 管理多种不同的屏幕尺寸

javascript - 单击链接时如何使跨度更改颜色

javascript - 一些实用函数的通用类型

c# - 在Javascript中将数组字符串解析为数组对象

php - 在 yii2 中使用 ajax 填充或填充所有字段

jquery - 无法使用 CSS + jQuery 设置左侧

browser - 为什么浏览器需要 CSS3 的供应商前缀?是什么阻止他们只使用标准的 CSS3 属性?

javascript - 如何在 Phonegap 的 SQLITE 中检查列是否存在

javascript - 为什么使用 element.innerHTML 后事件监听器会停止工作?

Javascript:什么查找更快:array.indexOf vs 对象哈希?