从父页面访问子 iFrame DOM

Posted

技术标签:

【中文标题】从父页面访问子 iFrame DOM【英文标题】:Access child iFrame DOM from parent page 【发布时间】:2011-07-08 02:29:14 【问题描述】:

这是交易:

domain.com/page -- 父页面 (document.domain=domain.com) 包含 iframe sub.domain.com/page -- 子 iframe (document.domain=not set) 在子域上

有什么方法可以访问该 iframe 的 DOM 还是我不走运?

同源策略是否阻止我在父页面中包含的 iframe 上强制使用 document.domain?我想这会破坏同源策略的目的......如果是这种情况,是否有任何解决方法可以访问呈现的父页面上 iframe 的 DOM?

【问题讨论】:

【参考方案1】:

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

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

这将在父页面(包含 iframe)的全局范围内创建一个函数。然后在父级中,只需以下

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

这与您可以控制加载到 iframe 中的页面一样...如果您不这样做,那么您就不走运了。

【讨论】:

我无权访问 iframe 中加载的页面,但这回答了我的问题。谢谢! 编辑:只是想澄清一下,除非您对要与之交谈的 iframe 具有编辑权限,否则这是不可能的。 优秀的答案。感谢您与我们分享。 +1 看起来这仅在您在同一个域中时有效。 没错,否则就是一场安全噩梦【参考方案2】:

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

您可以从 iframe 与父级对话,但不能再次回到 iframe。

【讨论】:

【参考方案3】:

据我所知,你运气不好。不过,您可以使用 URL 中的 hash-bang 在他们之间进行交谈,请参阅 this 进行体面的讨论。

【讨论】:

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

以上是关于从父页面访问子 iFrame DOM的主要内容,如果未能解决你的问题,请参考以下文章

IFrame父页面和子页面的交互

子窗口访问父页面iframe中的iframe,top打开的子窗口访问父页面中的iframe中的iframe

如何从父页面调用 iframe 中的脚本?

iframe子页面与父页面元素的访问以及js变量的访问

我可以从父页面验证 iFrame 页面吗?

子iframe 怎么访问 父的 iframe方法