无法从 iframe 访问父文档
Posted
技术标签:
【中文标题】无法从 iframe 访问父文档【英文标题】:Can't Access Parent-document from Iframe 【发布时间】:2013-10-28 01:28:29 【问题描述】:我有一个主页,用于导航到 iframe
主页:1.html
其他 3 个页面:one.html、two.html、3.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 访问父文档的主要内容,如果未能解决你的问题,请参考以下文章
访问 <iframe> 元素的窗口和文档的最简洁的跨浏览器方法是啥?