无法从 iframe 访问父文档

Posted

技术标签:

【中文标题】无法从 iframe 访问父文档【英文标题】:Can't Access Parent-document from Iframe 【发布时间】:2013-10-28 01:28:29 【问题描述】:

我有一个主页,用于导航到 iframe

中的其他 3 个页面

主页:1.html

其他 3 个页面:one.htmltwo.html3.html

代码

1.html

<html>
    <body>
        <div>
           <ul>
             <li style="float:left; margin:20px;"><a href="One.html" target="target">One</a></li>
             <li style="float:left; margin:30px;"><a href="Two.html" target="target">Two</a></li>
             <li style="float:left; margin:50px;"><a href="Three.html" target="target">Three</a></li>
           </ul>
           <iframe id="target"></iframe>
        </div>
    </body>
</html>

one.html

<html>
    <body onload="tryalert(parent.location.href); catch(e)alert(e);">
        1.html.
    </body>
</html>

但是显示parent-文档的位置时出现问题。它会发出如下警告消息:

SecurityError: Blocked a frame with origin "null" from accessing a frame with origin "null". Protocols, domains, and ports must match.

任何人都可以在此错误的上下文中解释消息中使用的术语的含义,或者解释为什么会发生这种情况???

注意:未使用服务器

【问题讨论】:

这可能是你的问题。如果您从磁盘读取文件,我猜原点为空?根据浏览器的不同,您可能会使用一些选项来启动它以忽略相同的来源策略。 @plalx 如果我从我自己的本地文件系统访问文件,那么安全问题是什么???你能解释一下吗? 你说你可以访问另一个框架,你试过读取它的属性吗? @plalx,对不起。刚才我注意到我只能使用语法parent.frames['id']访问当前帧。 【参考方案1】:

Chrome 相当严格地假设本地文件之间没有连接。

在 Mac 上,您可以像这样从终端启动 Chrome:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files

它会起作用,但最好的办法是使用网络服务器。

【讨论】:

是的。其他浏览器可能会以不同的方式处理它。 蒂姆,谢谢。 这在 IE9 中有效。感谢这个非常相关的信息。

以上是关于无法从 iframe 访问父文档的主要内容,如果未能解决你的问题,请参考以下文章

使用 postmessage 刷新 iframe 的父文档

如何从父文档中捕获 iframe 内部的刷新?

访问 <iframe> 元素的窗口和文档的最简洁的跨浏览器方法是啥?

为啥我无法访问设置了 src 或 srcdoc 属性的 iframe 文档?

错误:在 iFrame 中访问属性“文档”的权限被拒绝

获得从 iframe 到我无法控制的父窗口 dom 的跨域访问?