我有一个跨域网站的iframe。我想读取iframe的DOM,我认为这是可能的,因为使用检查器,我甚至可以修改iframe的DOM。然而,我试图阅读它的每一种方式,我都遇到了相同的原始政策。我想要的只是从iframe加载到我的本地DOM中的内容。我认为它会像$(document.body).find('iframe').html()
一样简单,但那会返回空字符串。
我真的希望有一种方法可以做到这一点,因为我过去几天一直在做的工作是基于这样可行的。
由于
答案 0 :(得分:67)
你做不到。 XSS protection。 javascript无法读取跨站点内容。没有主要的浏览器会允许你。对不起,但这是一个设计缺陷,你应该放弃这个想法。
修改强>
请注意,如果您对加载到iframe中的网站具有编辑权限,则可以使用postMessage(另请参阅browser compatibility)
答案 1 :(得分:14)
有一种简单的方法。
您创建了一个iframe,其源代码类似于“http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/unicorn
然后,您只需使用$ _GET获取此网址并使用file_get_contents($ _ GET ['url'])显示内容;
您将获得一个域名与您的域名相同的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)
有一种解决方法可以实现它。
首先,将iframe绑定到具有相对网址的目标网页。浏览器会将iframe中的网站视为与您网站相同的域名。
在您的网络服务器中,使用重写模块将请求从相对网址重定向到绝对网址。如果您使用IIS,我建议您查看IIRF module。