Javascript 为什么子帧可以重定向父帧?

Javascript 为什么子帧可以重定向父帧?,javascript,iframe,Javascript,Iframe,我看了这两个问题,我不明白 一方面,您可以重定向父iframe,另一方面,您不能重定向父iframe? 当我尝试它时,重定向父帧没有问题,所以我很好奇为什么每个人都说你不能重定向父帧,除非你在同一个域上。但是我可以重定向,而不必将帧放在同一个域上 如前所述,将重定向父iframe。需要记住的一点是,网站和iframe中包含的网站都必须位于同一个域中,才能正常工作,否则将出现访问被拒绝异常 它与浏览器相关吗 编辑 我有两页,这很有效,但不应该: 关于域1 <html> <

我看了这两个问题,我不明白

一方面,您可以重定向父iframe,另一方面,您不能重定向父iframe? 当我尝试它时,重定向父帧没有问题,所以我很好奇为什么每个人都说你不能重定向父帧,除非你在同一个域上。但是我可以重定向,而不必将帧放在同一个域上

如前所述,将重定向父iframe。需要记住的一点是,网站和iframe中包含的网站都必须位于同一个域中,才能正常工作,否则将出现访问被拒绝异常

它与浏览器相关吗

编辑

我有两页,这很有效,但不应该:

关于域1

<html>
  <body>
    <iframe src="http://domain2.fr"></iframe>
  </body>
</html>

关于域2

<html>
  <body>
    <script type="text/javascript">
      window.top.location.href = "http://google.fr";
    </script>
  </body>
</html>

window.top.location.href=”http://google.fr";

如果在同一个域上有两个帧(也有相同的协议和端口),那么一个帧可以将另一个帧重定向到您想要的任何位置,还可以访问javascript属性,从另一个帧执行函数,等等

如果您将一个帧从另一个域(或协议或端口)重定向到另一个域,则由于同源策略,您将无法执行我之前所述的所有操作,但重定向本身是允许的,因为在重定向之前,两个帧满足所述策略

以下是一些有用的信息:

引用该页的话:

如果协议、端口(如果其中一个是 指定的)和主机对于这两个页面是相同的


显然,
frames
pages

我猜这与您可以执行以下操作的原因相同:

<a href="http://google.com" target="_top">Redirect top to Google</a>

我在这里找到了这种行为的规则:


我找不到“为什么”,但就我个人而言,我发现在有人点击iframe中的某个内容后重定向家长是很有用的。在重定向整个页面之前,您可能希望首先执行异步操作并验证某些内容。由于无论何时使用
iframes
frames
对象
,都可以使用
实现这一点,因此您可以设置窗口层次结构,这些项目在该层次结构中充当“窗口”

您可以使用诸如
.parent
.frameElement
等属性遍历此层次结构。属性
.top
是层次结构中最高点的窗口,通常对应于最外层的帧

某些操作在层次结构中的窗口之间被禁止,而其他操作则不被禁止。不禁止更改窗口的
位置

说到底,那些说你不能这样做的人是不正确的。如果一个窗口的域不同,则不能从另一个窗口访问该窗口的内容。但是,您可以修改它们的位置属性。

为什么可能的答案非常简单<代码>窗口。位置
是Web API的一部分,它与JavaScript核心不完全相同。它是的一部分,因此由W3C管理,而不是ECMA。这就是为什么它允许您操纵顶部窗口的属性

严格地说,JS无法做到这一点,因为它缺乏IO功能,这使得该语言非常可移植。这就是为什么浏览器实现需要DOM API、查询DOM、请求重新绘制或与客户机交互。不过,DOM确实需要IO,因为它从实际的UI进行渲染和读取。由于XSS漏洞的原因,ECMAScript委员会中的一些人宁愿看到对
窗口的访问。top
受到严重限制,如果不是全部删除的话。不幸的是,W3C同意不同意,并实现了
window.top
引用。
在这种情况下谁对谁错?我不知道,很容易将客户端从iFrame中重定向到恶意站点,这是不安全的。但是如果有一个iFrame,然后无法访问顶部窗口,这将意味着无法与客户端轻松交互,这将是令人沮丧的。但这不是重点。底线是,您可以更改一些顶部窗口属性,这可能很有用。想想混搭吧。它们在XSS安全方面提出了很多挑战,但为webaps开辟了许多新的和令人兴奋的可能性。插入Douglas Crockford创建的一些最危险的XSS漏洞。谷歌有一个类似的库,但我忘了它的名字ATM


同样的原产地政策在这里也不适用。通过更改浏览器窗口中地址栏中的url,您也在更改
window.top.location.href
属性。如果那里有相同来源的限制,互联网就会消亡。您没有向其他位置发送请求,没有从第三方资源获取数据并将其加载到您的页面,没有将浏览器重定向到其他位置,从而关闭并清除DOM。

您可以更改父帧的位置。它主要用于金融页面等,以避免任何黑客攻击。是的,我测试过它,我可以更改它,但为什么到处都写着,如果父框架不是同一个域的一部分,我不能更改它的位置?@yokoloko你不能在它里面运行脚本,也不能在它的位置更改时监听它-但你可以重定向它。这实际上是真的,这里有证据:。。。它在chrome中工作没有问题。也许看一看,我不明白为什么允许重定向。这两个帧从不在同一个域上,因此不满足相同的源策略。哦,感谢来源,我想你是对的,它的行为与文档中所述的“top”相同,它应该能够重定向。作为旁注,许多第三方现在通过脚本标签添加iFrame,并使用postMessage与top进行通信。这给