yok*_*oko 14 javascript iframe
我看看这两个问题,我不明白.
一方面,你似乎可以重定向父iframe,另一方面你不能重定向?当我尝试它时,我没有问题重定向父框架所以我很好奇为什么每个人都说你不能重定向父框架,除非你在同一个域.但我可以重定向,而不会在同一个域上有框架.
如前所述,将重定向父iframe.要记住的一件事是网站和iframe中包含的网站都需要在同一个域上才能工作,否则您将获得访问被拒绝的异常.
它与浏览器有关吗?
编辑
我有两页,这有效,但不应该:
在域1上
<html>
<body>
<iframe src="http://domain2.fr"></iframe>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
在域2上
<html>
<body>
<script type="text/javascript">
window.top.location.href = "http://google.fr";
</script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
Eli*_*gem 13
为什么可能的答案非常简单.window.location是Web API的一部分,它与JavaScript核心不完全相同.它是DOM界面的一部分,因此它被W3C,而不是ECMA所包围.这就是为什么它允许你操纵顶窗的属性.
严格来说,JS无法做到这一点,因为它缺乏IO功能,这使得语言非常便携.这就是浏览器实现需要DOM API,查询DOM,请求重新绘制或与客户端交互的原因.但是,DOM 确实需要IO,因为它呈现并从实际的UI读取.window.top由于XSS漏洞的原因,ECMAScript委员会中的某些人宁愿看到对严格限制的访问,如果不是全部一起删除的话.可悲的是,W3C同意不同意,并且window.top无论如何都实施了参考.
在这种情况下谁是对是谁?我不知道,在iFrame中将客户端重定向到恶意网站很容易,这是不安全的.但是拥有一个iFrame,然后无法访问顶部窗口,这将意味着无法轻松地与客户端进行交互,这将是令人沮丧的.但这不是重点.最重要的是,您可以更改一些顶部窗口属性,它可能很有用.想想mashup.它们在XSS安全性方面提出了许多挑战,但为webaps开辟了许多新的令人兴奋的可能性.要插入一些最危险的XSS漏洞,请查看由Douglas Crockford创建的ADSafe.谷歌有一个类似的库,但我忘了它的名字ATM ......
同源政策也不适用于此.通过更改浏览器窗口中地址栏中的URL,您也可以更改window.top.location.href属性.如果那里存在同源限制,互联网将会死亡.您没有向其他位置发送请求,您没有从第三方资源获取数据并将其加载到您的页面中,而是将浏览器重定向到另一个位置,从而关闭并清除DOM.
我猜这是你可以做到以下几点的原因:
<a href="http://google.com" target="_top">Redirect top to Google</a>
Run Code Online (Sandbox Code Playgroud)
我在这里找到了这种行为的规则:http://www.w3.org/TR/html5/browsers.html#valid-browsing-context-name-or-keyword
我找不到"为什么",但我个人发现在有人点击了iframe中的内容后重定向父母很有用.您可能希望首先执行异步操作并在重定向整个页面之前验证某些内容.由于这已经可以使用<a>标签,因此在JS中也可以找到它.不知道为什么<a>标签允许功能.
话虽如此,你总是可以通过添加sandbox=""属性来阻止这种行为,例如:http://jsfiddle.net/ppkzS/1/
无论何时使用iframes,, frames或者objects,您都设置了一个窗口层次结构,这些项目在此层次结构中充当"窗口".
可以遍历与属性,如该层次结构.parent,.frameElement等等.该属性.top是层次结构中最高点的窗口,通常对应于最外层的框架.
层次结构中的窗口之间禁止某些操作,而其他操作则不然.不禁止更改location窗口.
最终,那些说你不能这样做的人是不正确的.如果域名不同,您不能从不同的窗口访问一个窗口的内容.但是,您可以修改其位置属性.
| 归档时间: |
|
| 查看次数: |
13368 次 |
| 最近记录: |