跨域JavaScript的父位置设置Firefox的错误(Cross Domain JavaScri

2019-07-30 11:56发布

这里是这样的:
页A包含IFRAME B,B包含IFRAME C,A和B是由另一相同的结构域,C下。
Ç尝试与额外的信息重置父B的位置下面的“#”使用片段标识信息来解决跨域通信。

IE6 / 7/8只是正常工作与这种情况下,而Firefox块parent.location与错误消息中设置[ 访问属性被拒绝“代码:” 1010]。 但是,如果B是顶级窗口,这意味着没有A,Firefox的生活了。

很奇怪,我...难道你们,请帮助吗?

谢谢!

Answer 1:

从历史上看,任何窗口可以改变任何其他窗口的位置。 事实证明,这是一个问题,因为,除其他事项外,这意味着嵌入在一个窗口中登录的iframe是不安全的(因为这样一个恶意站点可以有欺骗性的版本替换登录IFRAME)。 随着时间的推移进一步的限制已经应用到位置改变浏览器窗口,直到现在,当HTML5和大多数浏览器已经就共同协议的祖先政策 。 概括地说,释义HTML5规范,一个窗口中的可以改变另一个窗口乙当且仅当的位置:

  • A和B的位置具有相同的原点,这是说它们具有相同的方案,主机和端口(HTTP,stackoverflow.com,80例如),或
  • B是一个顶层窗口,且A是在嵌套在某深度乙内的帧的窗口(直接子,一个孩子的孩子等),或
  • B是使用窗打开window.open和A可以改变开B中的窗口的位置(因此B是由A打开时,通过由A打开一个弹出窗口弹出,或者在更大的深度),或
  • B不是顶级窗口,但它的父窗口,或其父的父窗口,或在父母子女关系的一些类似的量窗口A的位置是同源

(相同的起源是比这更复杂,但上面的描述嵌入捕捉其实质和涵盖了最常见的情况)。

在此政策下,C可以改变的位置,以及可能改变B或C的位置,但如果您需要解决此C可以不改变B的位置,那么你应该改变你的页面A的位置一些改变B中为宜; 或者,你可以问你的网页B来改变它自己的位置 。

希望这是信息,如果没有一定的帮助。 浏览器的安全模型,与其说是设计 发展而来的 ,只有在HTML5最近的工作是不是真的被精确地确定下来,以解决这些跨浏览器的不一致性。

所有这一切说,我真为你感到惊讶IE7和IE8的工作 - 这是我的理解上面的政策主要基于IE7执行的政策。



Answer 2:

从C,可使用访问B的窗口window.top

尝试, var B = window.top; B.location = "..."; var B = window.top; B.location = "...";



文章来源: Cross Domain JavaScript parent location setting firefox error