阻止具有源的框架访问跨域框架 使用相同的域
Posted
技术标签:
【中文标题】阻止具有源的框架访问跨域框架 使用相同的域【英文标题】:blocked a frame with origin from accessing a cross-origin frame Using the same domain 【发布时间】:2015-04-05 13:56:42 【问题描述】:您好,我对此消息有疑问。
我的主页面的网址是:
page1.mydomain.com/page1.html
此页面有一个 iframe:
frame.mydomain.com/iframe.html
然后我从主页打开另一个页面的窗口,如下所示:
mywindow = window.open("http://page1.mydomain.com/page3.html", 'page3', 'status=1,height=768,width=1280,scrollbars=1');
所有3个页面都设置了javascript:
document.domain = "mydomain.com";
我可以毫无问题地从主页交互到 iframe。 我只有访问 window.open 属性的问题。
喜欢:
mywindow.document.getElementById("something")
我收到了那个错误信息。
blocked a frame with origin from accessing a cross-origin frame
如果我从第 3 页尝试:
window.opener.document.getElementById("somethingPage1")
我遇到了同样的错误:
blocked a frame with origin from accessing a cross-origin frame
为什么我可以和 iframe 交互,而不能和 window.open 和 window.opener 交互?
【问题讨论】:
我不能 100% 确定,但这可能是因为您的 iframe/frames 不是从相同的域、主机、端口加载的。以下是一些可能对您有所帮助的资源:@987654321@developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORSdeveloper.mozilla.org/en-US/docs/Web/HTML/… 如果您有更多详细信息,请告诉我。 嗨。我没有 iframe 的问题。问题在于弹出窗口。两者都来自同一个域/端口。实际上,该文件位于同一目录中。由于我没有找到任何解决方案,我正在使用 postMessage... 目录无关紧要,但据我所知,即使您设置了 document.domain,您也无法与主域的子域提供的页面进行交互。具有相同目录(路径)的部分无关紧要,因此您可以拥有任何您想要的嵌套。在 jsbin 或 jsfiddle 或 github 上分享一些代码,我们会弄清楚的。 它不像 page1 和 page3 设置了相同的document.domain
。确保在您进行访问时已设置该属性。这比听起来要难,因为文档都可能需要一段时间来加载和运行设置document.domain
的脚本。例如,如果您window.open
然后立即访问mywindow.document.something
,则几乎不可能访问它。跨窗口脚本很繁琐,window.postMessage
在很多情况下更容易。
【参考方案1】:
在我的情况下,域名不同,我通过用父域名替换客户的域来解决它。如果在子(弹出)窗口中域名无关紧要,您可以尝试。 您尝试访问 window.opener.document.getElementById() 的内容将不起作用。 它会在您发布时引发安全错误。最好的方法是尽可能将两个 URL 设置在同一个域名下。或者只是为了开发你可以安装扩展 "Allow-Control-Allow-Origin:" 在 Chrome 中它会起作用。
【讨论】:
以上是关于阻止具有源的框架访问跨域框架 使用相同的域的主要内容,如果未能解决你的问题,请参考以下文章