Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
跨域JavaScript父位置设置firefox错误_Javascript_Firefox_Iframe_Cross Domain - Fatal编程技术网

跨域JavaScript父位置设置firefox错误

跨域JavaScript父位置设置firefox错误,javascript,firefox,iframe,cross-domain,Javascript,Firefox,Iframe,Cross Domain,以下是案例: 页面A包含iframe B,B包含iframe C,A和B在同一个域下,C在另一个域下C尝试使用“#”后面的额外信息重置父B的位置,以使用片段Id消息传递解决跨域通信问题IE6/7/8在这种情况下可以正常工作,而Firefox会阻止parent.location设置,并显示错误消息[拒绝访问属性”代码:“1010]。 但是如果B是顶部窗口,意味着没有A,那么Firefox也会存在。 我觉得很奇怪。。。你们能帮忙吗? 谢谢大家! 从C可以使用window.top访问B的窗口 试试看

以下是案例:
页面A包含iframe B,B包含iframe C,A和B在同一个域下,C在另一个域下
C尝试使用“#”后面的额外信息重置父B的位置,以使用片段Id消息传递解决跨域通信问题

IE6/7/8在这种情况下可以正常工作,而Firefox会阻止parent.location设置,并显示错误消息[拒绝访问属性”代码:“1010]。 但是如果B是顶部窗口,意味着没有A,那么Firefox也会存在。

我觉得很奇怪。。。你们能帮忙吗?


谢谢大家!

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


试试看,
var B=window.top;B.location=“…”

历史上,任何窗口都可能更改任何其他窗口的位置。这是一个问题,因为除其他外,这意味着在窗口中嵌入登录iframe是不安全的(因为恶意站点可能会用伪造版本替换登录iframe)。随着时间的推移,浏览器窗口的位置变化受到了进一步的限制,直到现在,大多数浏览器都已经就这一问题达成了共识。简而言之,套用HTML5规范,一个窗口a可以改变另一个窗口B的位置:

  • A和B的位置具有相同的原点,也就是说它们具有相同的方案、主机和端口(例如http,stackoverflow.com,80),或者
  • B是顶层窗口,a是嵌套在B中某个深度的框架中的窗口(直接子窗口、子窗口的子窗口等),或
  • B是使用
    窗口打开的窗口。打开
    和a可以更改打开B的窗口的位置(因此B是由a打开的弹出窗口、由a打开的弹出窗口或更大的深度),或
  • B不是顶级窗口,而是其父窗口,或其父窗口的父窗口,或在类似数量的父窗口中,该窗口和a的位置是相同的原点
(同源比这更复杂,但上面的嵌入式描述抓住了它的本质,涵盖了最常见的情况。)

根据本政策,C可以更改A的位置,A可以更改B或C的位置,但C不能更改B的位置。如果您需要解决此问题,则应将页面A的位置更改为适当更改B的位置;或者,你也可以

希望这是有益的,如果不一定有帮助的话。浏览器安全模型的设计与其说是在进化,还不如说是在最近的HTML5工作中,它才真正被确定下来,以解决这些跨浏览器的不一致性


综上所述,我很惊讶IE7和IE8能为您工作——据我所知,上述策略主要基于IE7实施的策略。

如果使用C中的window.top,我得到的是A而不是B,但我不想重置A的位置……感谢您清晰而漂亮的回答,我将重新考虑我的解决方案。谢谢Jeff。应该注意的是,您链接到的window.postMessage在所有现代浏览器中都可以使用,但IE中的语法略有不同。我贴了一个类似的问题,最后自己回答了。以下是我的答案,其中有一个简单的跨浏览器示例实现: