这里是案例:
page A包含iframe B,B包含iframe C,A和B在同一个域下,C在另一个下。
C尝试使用“#”后面的额外信息重置父B的位置,以使用分段ID消息传递来解决跨域通信。
IE6/7/8在这种情况下正常工作,而Firefox阻止parent.location设置错误消息[访问被拒绝的财产“代码:”1010]。 但是,如果B是顶层窗口,意味着没有A,Firefox也会活着。
这对我来说很奇怪......你们能帮忙吗?
谢谢!跨域JavaScript父级位置设置火狐错误
回答
从历史上看,任何窗口可以改变任何其他窗口的位置。原来这是一个问题,因为除此之外,这意味着在窗口中嵌入登录iframe是不安全的(因为然后恶意网站可能会用欺骗版本替换登录iframe)。随着时间的推移,对浏览器窗口的位置更改进一步加以限制,直到现在,当HTML5和大多数浏览器已在the ancestor policy上达成共识时。概括地说,释义HTML5规范,一个窗口中的可以改变另一个窗口乙当且仅当的位置:
- A和B的位置具有相同的原点,这是说它们具有相同的模式,主机,端口(例如http,stackoverflow.com,80)或
- B是顶层窗口,A是嵌套在B中某个深度的框架中的窗口(直接子节点,子节点子节点,等等)或
- B是使用
window.open
打开的窗口,A可以更改打开B的窗口的位置(因此B是由A打开的弹出窗口,通过A打开的弹出窗口或更深的窗口) ,或 - B不是顶层窗口,但是它的父窗口,或它的父的父窗口,或在亲本的一些类似量的窗口和A的位置是同源
(同原点比这更复杂,但是上面的嵌入描述捕捉了它的本质并且涵盖了最常见的情况。)
在这个策略下,C可以改变A的位置,并且A可以改变B或C的位置,但是C可能不会改变B的位置。如果你需要解决这个问题,那么你应该改变你的页面A的位置以适当地改变B;或者,您可以ask your page B to change its own location。
希望这是丰富的,如果不一定有帮助。浏览器安全模型并非如此设计如演变,只有最近在HTML5中的工作是真正精确地确定,以解决这些跨浏览器的不一致。
所有这一切说,我很惊讶IE7和IE8为你工作 - 这是我的理解上述政策主要是基于政策IE7实施。
从C可以使用window.top
访问B的窗口。
尝试,var B = window.top; B.location = "...";
如果使用window.top从C,我得到了A而不是B,但我不想重置A的位置... – 2009-07-21 04:33:14
- 1. 跨域JavaScript,嵌入iframe案例中的父级位置设置
- 2. 跨域iframe问题(设置父级位置)
- 3. 位置:Vs的火狐
- 4. Jquery Ajax表单,跨域火狐问题
- 5. 绝对位置相对父表在哪? (IE6 VS火狐/铬)
- 6. 绝对位置 - 铬和火狐
- 7. wufoo跨域设置?
- 8. CKRecord设置父错误4097
- 9. 无法在DOCTYPE设置(火狐),以宽/高设置为IMG
- 10. 降级火狐8
- 11. 访问火狐cookies.sqlite错误
- 12. 火狐Jquery计算错误
- 13. 的JavaScript错误的位置
- 14. 硒火狐配置文件没有正确设置
- 15. php设置值在父级
- 16. 为父域设置cookie
- 17. 如何将FolderBrowserDialog的位置设置为父级的中心?
- 18. nginx设置位置错误下载
- 19. 火力地堡设置错误
- 20. 跨度输入(设置位置)
- 21. Python设置鼠标位置跨平台
- 22. 跨线程错误,尽管设置ApartmentState
- 23. 隐藏父级如果子跨度设置为显示:无
- 24. CATransform3DMakeRotation设置锚点和位置。 iOS7查看位置错误
- 25. HTML5地理位置KCLError域错误
- 26. 跨域地理位置跟踪
- 27. Fancybox/iFrame使用postMessage的位置(跨域)
- 28. EnableCrossAppRedirects - 记录跨域功能的位置?
- 29. 硒火狐配置文件异常
- 30. 位置火狐活动指示器/微调图像的
感谢您的清晰和美丽的答案,我会重新考虑我的解决方案。 – 2009-07-22 10:44:21