20

关于 window.top.Location 对象的跨域策略中有一个非常特殊的边缘案例......

假设我有 IFrame A ,在域 www.bbb.com 中,位于域 www.aaa.com 的页面内。

IFrame 内的页面可以:

  • 将 window.top.location 与 window.location 进行比较(以检测它是否被框起来)
  • 调用 window.top.location.replace(window.location) 重定向到自己
  • 调用 window.top.location.replace("any任意字符串") 重定向到其他地方

但它不能:

  • 警报、Document.Write 或执行任何类型的 window.top.location.href 输出
  • 将它连接到任何其他变量中,或以任何有用的方式使用它
  • 调用 window.top.location.reload()

这些只是我能很快找到的。我敢肯定还有其他边缘情况。
如果顶部位于另一个域中,浏览器似乎不允许使用 top.location 对象,除了一些列入白名单的东西......

这在任何地方都有记录吗?
我能找到这些列入白名单的东西吗?
这是在 HTML 标准中,并且在所有浏览器中都同样实现了吗?还是这个半随机的执行?

4

2 回答 2

8

这完全由HTML5 标准在 5.5.3.1 节中指定。

于 2013-10-03T17:18:24.340 回答
6

安全规则确实因浏览器版本而异。通常较新的版本有更严格的规则,但也更精细。

我怀疑旧的浏览器会自由地让您访问顶部框架的位置对象,一些较新的浏览器会完全拒绝它,而当前版本允许您比较位置对象但不能从中读取。

您也许可以找到有关此的文档,但它会针对每个浏览器和每个版本的浏览器都是特定的。据我所知,这没有真正的标准。每个浏览器供应商都试图尽可能地保护用户,同时仍然为网站构建者保留一些可用性。一般来说,你不能真的假设任何接近边界的东西在所有浏览器中都有效,或者它会在未来的版本中继续有效。

于 2009-07-11T15:30:11.793 回答