获取跨域iframe的DOM内容

我有一个跨网站的iframe。 我想读取iframe的DOM,我相信这是可能的,因为使用检查器,我甚至可以修改iframe的DOM。 我尝试阅读的每一个方法,但是,我碰到相同的起源政策。 我想要的是从iframe中加载的本地DOM中的内容。 我认为这将是$(document.body).find('iframe').html() ,但是这是返回空string。

我真的希望有一种方法可以做到这一点,因为过去几天我一直在做的工作已经被预测,这是可行的。

谢谢

你不能。 XSS保护 。 跨网站的内容不能被JavaScript读取。 没有主要的浏览器将允许你。 我很抱歉,但这是一个devise缺陷,你应该放弃这个想法。

编辑

请注意,如果您已编辑访问加载到iframe的网站,您有两个select:

  1. 使用postMessage (另请参阅浏览器兼容性 )

  2. CORS标题 :只需将以下标题添加到iframed网站:

Access-Control-Allow-Origin: http://foo.example

其中http://foo.example是托pipe带有iframe的页面的域

有一个简单的方法。

  1. 你创build一个iframe,其源代码如“ http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/unicorn

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

您将获得一个与您的域相同的iframe,然后您将能够使用$(“iframe”)。contents()。find(“body”)来操作内容。

如果您有权访问iframed页面,则可以使用easyXDM等function在iframe中进行函数调用并返回数据。

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

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

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

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

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

有一个解决方法来实现它。

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

  2. 在您的Web服务器中,使用重写模块将请求从相对urlredirect到绝对url。 如果您使用IIS,我build议您检查IIRF模块 。