获取跨域iframe的DOM内容

时间:2011-05-29 22:47:18

标签: javascript jquery html html5 iframe

我有一个跨域网站的iframe。我想读取iframe的DOM,我认为这是可能的,因为使用检查器,我甚至可以修改iframe的DOM。然而,我试图阅读它的每一种方式,我都遇到了相同的原始政策。我想要的只是从iframe加载到我的本地DOM中的内容。我认为它会像$(document.body).find('iframe').html()一样简单,但那会返回空字符串。

我真的希望有一种方法可以做到这一点,因为我过去几天一直在做的工作是基于这样可行的。

由于

5 个答案:

答案 0 :(得分:67)

你做不到。 XSS protection。 javascript无法读取跨站点内容。没有主要的浏览器会允许你。对不起,但这是一个设计缺陷,你应该放弃这个想法。

修改

请注意,如果您对加载到iframe中的网站具有编辑权限,则可以使用postMessage(另请参阅browser compatibility

答案 1 :(得分:14)

有一种简单的方法。

  1. 您创建了一个iframe,其源代码类似于“http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/unicorn

  2. 然后,您只需使用$ _GET获取此网址并使用file_get_contents($ _ GET ['url'])显示内容;

  3. 您将获得一个域名与您的域名相同的iframe,然后您就可以使用$(“iframe”)。contents()。find(“body”)来操作内容。

答案 2 :(得分:8)

如果您可以访问iframed页面,则可以使用easyXDM之类的内容在iframe中进行函数调用并返回数据。

如果您无权访问iframed页面,则必须使用服务器端解决方案。 使用PHP,你可以做一些快速和肮脏的事情,如:

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 

答案 3 :(得分:4)

如果您可以访问加载的域/ iframe,则可以使用window.postMessage在iframe和主窗口之间进行通信。

在iframe中使用JavaScript读取DOM,并通过postMessage将其发送到顶部窗口。

此处有更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

答案 4 :(得分:-2)

有一种解决方法可以实现它。

  1. 首先,将iframe绑定到具有相对网址的目标网页。浏览器会将iframe中的网站视为与您网站相同的域名。

  2. 在您的网络服务器中,使用重写模块将请求从相对网址重定向到绝对网址。如果您使用IIS,我建议您查看IIRF module