2

如果 iframe 中的文档位于另一个域中,是否有办法从父文档访问 iframe 中文档的 DOM?如果父页面和子页面都在同一个域上,我可以轻松访问它,但是当它们在不同域上时我需要能够做到这一点。

如果不是,也许还有其他方法可以读取 iframe 的内容(一个考虑是创建一个 ActiveX 控件,因为这仅供内部公司使用,但我希望它是跨浏览器兼容的)?

4

3 回答 3

3

并不真地。这对安全至关重要——否则你可能会打开我的网上银行网站或网络邮件并搞砸它。

您可以通过设置稍微放宽限制document.domain,但顶级域仍然必须相同。

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

my.example.com/proxy?url=otherdomain.com/page
于 2008-12-03T00:08:44.137 回答
1

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

  • 加载在 iframe 中的文档必须配合,并且
  • 无论如何您都无法访问完整的文档(您可以读回一些参数,或者您可以尝试对整个文档进行 URL 编码 - 但这会非常难看)
于 2008-12-03T00:11:17.847 回答
0

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

于 2009-02-07T15:25:07.167 回答