如果iframe中的文档位于其他域上,是否可以通过父文档访问iframe中文档的DOM?如果父页面和子页面都位于同一个域中,我可以轻松访问它,但是当它们位于不同的域时,我需要能够这样做。
如果没有,也许还有其他方法可以读取iframe的内容(一个考虑因素是创建一个ActiveX控件,因为这只适用于公司内部使用,但我希望它是跨浏览器兼容的)?
答案 0 :(得分:3)
不是真的。这对于安全性至关重要 - 否则你可以打开我的网上银行网站或网络邮件并搞乱它。
您可以document.domain
设置my.example.com/proxy?url=otherdomain.com/page
,但顶级域名必须相同。
您可以通过自己的服务器代理请求来解决此限制(但不要忘记保护它,否则s [cp] ammers可能会滥用它)
{{1}}
答案 1 :(得分:1)
理论上您可以使用标准DOM level2 contentDocument属性访问iframe的内容。 实际上您可能已经发现,由于安全问题,大多数浏览器都拒绝访问外部文档的DOM。 无法访问完整的DOM AFAIK(尽管可能会有一些特定于浏览器的调整来禁用同域检查);对于跨域XHR,一个流行的技巧是使用URL片段标识符(参见例如this link)在iframe和主文档中来回反弹数据,您可以使用相同的技术但是:
答案 2 :(得分:0)
我刚刚发现了HTML5引入的postMessage
方法;它已经在最近的浏览器中实现(FF3,IE8和Safari 4)。它允许在浏览器内的任何Windows对象之间交换消息。
有关详细信息,请参阅MDC上的文档以及John Resig的此nice tutorial。