javascript - 为什么 child 可以重定向父框架?

标签 javascript iframe

这两个问题我看了看,没看懂。

Redirect parent window from an iframe action

How to prevent IFRAME from redirecting top-level window

一方面,您似乎可以重定向父 iframe,而另一方面却不能? 当我尝试它时,重定向父框架没有问题,所以我很好奇为什么每个人都说你不能重定向父框架,除非你在同一个域中。但是我可以在没有相同域上的框架的情况下重定向。

As stated previously, will redirect the parent iframe. One thing to bear in mind is that both the website, and the site contained in the iframe need to be on the same domain for this to work, or you'll get an access denied exception.

与浏览器有关吗?

编辑

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

在域 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.locationWeb API 的一部分,与 JavaScript 核心并不完全相同。它是 DOM interface 的一部分,因此它由 W3C 而不是 ECMA 管理。这就是为什么它允许您操纵顶层窗口的属性。

严格来说,JS 无法做到这一点,因为它缺乏 IO 能力,这使得该语言具有极强的可移植性。这就是浏览器实现需要 DOM API 来查询 DOM、请求重绘或与客户端交互的原因。但是,DOM 确实需要 IO,因为它呈现并从实际 UI 读取。出于 XSS 漏洞的原因,ECMAScript 委员会中的一些人宁愿看到对 window.top 的访问受到严格限制,如果不一起删除的话。遗憾的是 W3C 同意不同意,并且无论如何都实现了 window.top 引用。
在这种情况下谁对谁错?我不知道,很容易将客户端从 iFrame 中重定向到恶意站点,这是不安全的。但是拥有 iFrame 却无法访问顶部窗口会令人沮丧,这意味着无法轻松地与客户端进行交互。但这不是重点。底线是,您可以更改一些顶部窗口属性,它可能很有用。想想混搭。它们在 XSS 安全性方面提出了许多挑战,但为 webap 开辟了许多新的和令人兴奋的可能性。要堵住一些最危险的 XSS 漏洞,take a look at ADSafe ,由道格拉斯克罗克福德创建。谷歌有一个类似的库,但我忘了它的名字 ATM...

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

关于javascript - 为什么 child 可以重定向父框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17967423/

相关文章:

html - 如何在谷歌地图中指向多个地方

javascript - 自定义滚动条流出屏幕

php - 在 php/javascript 中将 "Sun Jul 15 2012 00:00:00 GMT+0700 (SE Asia Standard Time)"转换为 YYYY-mm-dd

javascript - 将输入字段添加到 div 的问题

javascript - 如何检查 iframe 是否正在加载元素?

html - 如何使用 HTML5 应用程序在 Android 上启用全屏 youtube 视频?

javascript - PHP 或 JavaScript 迭代无限数量的数组

javascript - 如何使以日文字符(长文本)开头的数字在 CSS 中的浏览器中排成一行

html - IE中iframe背景透明

javascript - 使用 JavaScript 滚动 iframe?