JavaScript能否从父页面访问iframe元素?

7

我在一个页面上有一个iframe,该iframe和父页面位于不同的域,父页面上的javascript代码能否访问此iframe内部的元素?

7个回答

14

如果页面来自不同的域名,浏览器的安全沙盒应该会阻止此类访问。当两个页面来自同一个域名的不同域时,这可能有效,但这在浏览器之间(甚至是同一浏览器的不同版本)可能会有所不同。

访问子iframe可能有效,但反过来肯定是不行的。


我在谈论访问子iframe元素,这应该可以工作吗? - Amr Elgarhy
这些是我正在创建的网站,希望它们都调用同一个服务。 - Amr Elgarhy
你最好使用XMLHttpRequest对象调用你的服务。所有框架将能够自己访问该服务,它们之间不需要任何通信。 - Gerco Dries

3
最简单的方法是通过window对象上的frames属性,像这样:

window.frames[0].document.getElementById('ElementId').style.backgroundColor="#000";

3
如果子窗口位于不同的域名下,您将会收到“Error: Permission denied to access property 'document'” 的错误提示。 - lulalala
2
问题说明这个 iframe 在另一个域上,所以这种方法行不通。 - M. Jahedbozorgan

1

1
如果这两个域完全分离,那么就不可能了。

只有在您控制两个域名时,才能使用easyxdm。 - M. Jahedbozorgan

0

你可以使用CORS来实现这一点,具体是将“document.domain”值在父级和子级中进行匹配。但是,请理解这样做可能带来的安全隐患,并且你需要访问父级和子级文档的源代码。

如果你拥有多个子域名,这一点尤为重要。 我经常使用这种技术,所以我知道它是可行的,即使在SSL下也是如此。


0

可以使用Chrome浏览器的--disable-web-security参数来实现... ;)


-2

是的,通过document.frames数组,您可以访问iframe。


1
你忽略了问题中更为相关的x-domain部分。此外,document.frames是非标准的,请使用具有更广泛支持的window.frames。 - annakata
6
首先,它是"window.frames"。其次,如果页面位于不同的域名下,它仍然无法运行。 - Josh Stodola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接