如何从另一个域读取加载了页面的iframe的DOM?

如何从另一个域读取加载了页面的iframe的DOM?,dom,browser,iframe,activex,cross-browser,Dom,Browser,Iframe,Activex,Cross Browser,如果iframe中的文档位于另一个域中,是否有方法从父文档访问iframe中文档的DOM?如果父页面和子页面都在同一个域上,我可以很容易地访问它,但是当它们在不同的域上时,我需要能够这样做 如果没有,可能还有其他方法来读取iframe的内容(考虑的一个问题是创建ActiveX控件,因为这只供公司内部使用,但我更希望它能够跨浏览器兼容)?不太可能。这对安全性至关重要——否则你可能会打开我的网上银行网站或网络邮件,并将其搞乱 您可以通过设置document.domain稍微调整一下,但顶级域必须相同

如果iframe中的文档位于另一个域中,是否有方法从父文档访问iframe中文档的DOM?如果父页面和子页面都在同一个域上,我可以很容易地访问它,但是当它们在不同的域上时,我需要能够这样做


如果没有,可能还有其他方法来读取iframe的内容(考虑的一个问题是创建ActiveX控件,因为这只供公司内部使用,但我更希望它能够跨浏览器兼容)?

不太可能。这对安全性至关重要——否则你可能会打开我的网上银行网站或网络邮件,并将其搞乱

您可以通过设置
document.domain
稍微调整一下,但顶级域必须相同

您可以通过自己的服务器代理请求来克服此限制(但不要忘记保护它,否则s[cp]ammers可能会滥用它)

理论上,您可以使用标准DOM level2属性访问iframe的内容。实际上,您可能已经发现,出于安全考虑,大多数浏览器拒绝访问外部文档的DOM。 无法访问完整的DOM AFAIK(尽管可能有一些特定于浏览器的调整来禁用相同的域检查);对于跨域XHR,一个流行的技巧是使用URL片段标识符在iframe和主文档之间来回反弹数据(参见示例),您可以使用相同的技术,但:

  • iframe中加载的文档必须配合,并且
  • 您无论如何都无法访问完整的文档(您可以读回一些参数,或者您可以尝试对整个文档进行URL编码,但这将非常难看)

我刚刚发现了HTML5引入的
postMessage
方法;它已经在最近的浏览器(FF3、IE8和Safari 4)中实现。它允许在浏览器内的任何windows对象之间交换消息。 有关详细信息,请参阅John Resig的文档

my.example.com/proxy?url=otherdomain.com/page