阻止具有原点的帧访问跨源帧使用相同的域

ric*_*rdo 6 javascript security google-chrome

嗨,我有这个消息的问题.

我MAIN页面的网址是:

page1.mydomain.com/page1.html
Run Code Online (Sandbox Code Playgroud)

此页面有一个Iframe:

frame.mydomain.com/iframe.html
Run Code Online (Sandbox Code Playgroud)

从主页面我打开另一个页面的窗口:

mywindow = window.open("http://page1.mydomain.com/page3.html", 'page3', 'status=1,height=768,width=1280,scrollbars=1');
Run Code Online (Sandbox Code Playgroud)

所有3个页面都设置了javascript:

document.domain = "mydomain.com";
Run Code Online (Sandbox Code Playgroud)

我可以毫无问题地从主页面与iframe进行交互.我只有访问window.open属性的问题.

喜欢:

mywindow.document.getElementById("something")
Run Code Online (Sandbox Code Playgroud)

我收到了错误消息.

blocked a frame with origin from accessing a cross-origin frame
Run Code Online (Sandbox Code Playgroud)

如果我从page3尝试:

window.opener.document.getElementById("somethingPage1")
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误:

blocked a frame with origin from accessing a cross-origin frame
Run Code Online (Sandbox Code Playgroud)

为什么我可以与iframe交互并且无法与window.open和window.opener进行交互?

小智 -1

就我而言,域名不同,我通过将客户的域名替换为父级的域名来解决这个问题。如果子(弹出)窗口中的域名不重要,您可以尝试这样做。您尝试访问 window.opener.document.getElementById() 的内容将不起作用。当您发布时,它会引发安全错误。最好的方法是如果可能的话,将两个 URL 置于同一域名下。或者只是为了开发,您可以在 Chrome 中安装扩展“Allow-Control-Allow-Origin:”,它将起作用。