从父页面访问子iFrame DOM

19

这是问题的情况:

domain.com/page -- 父页面 (document.domain=domain.com) 包含一个iframe sub.domain.com/page -- 子iframe (document.domain=未设置) 在子域上

有没有办法访问那个iframe的DOM,还是我没戏了?

同源策略是否会阻止我强制在父页面中包含的iframe上设置document.domain? 我想这将违背同源策略的目的... 如果是这样的话,有没有任何方法绕过同源策略来访问呈现在父页面上的iframe的DOM?

3个回答

34

有一种方法。当iframe中的页面加载时,让它执行以下操作:

parent.childGetElementById = function (id) {return document.getElementById(id);}
parent.childLoaded();

这将在包含 iframe 的父页面的全局作用域中创建一个函数。然后在父页面中,只需添加以下内容:

function childLoaded() {var dom = childGetElementById('someid');}

只要你控制着加载到iframe中的页面,这就没问题...如果你没有控制权,那么你就没有办法了。


2
我无法访问在 iframe 中加载的页面,但这回答了我的问题。谢谢! - timelfelt
编辑:只想澄清,除非您可以编辑要访问的 iframe,否则这是不可能的。 - timelfelt
非常好的答案。感谢与我们分享。+1 - OO7
似乎只有在相同的域名下才能正常工作。 - willem
这是正确的,否则它将成为一个安全噩梦。 - Zoidberg

10

这是一种浏览器安全措施,否则每个人都可以包装你的银行网站并在你登录时窃取你的密码。

你可以从 iframe 向父级页面通信,但无法再次返回到 iframe 中。


window.frames[0].document.getElementById("IdOfelementWithinIframe") - Vaisakh K M

0

就我所知,你很不幸。但你可以使用URL中的hash-bang来在它们之间进行交流,参见this以获取相关讨论。


谢谢提供链接。不幸的是,这些页面是第三方的,我无法像这样访问它们。 - timelfelt

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