这个问题在这里已有答案:
我有一个跨域网站的iframe . 我想读取iframe的DOM,我认为这是可能的,因为使用检查器,我甚至可以修改iframe的DOM . 然而,我尝试阅读它的每一种方式都会遇到相同的原始政策 . 我想要的只是从iframe加载到我的本地DOM中的内容 . 我认为它会像 $(document.body).find('iframe').html()
一样简单,但那会返回空字符串 .
我真的希望有一种方法可以做到这一点,因为我过去几天一直在做的工作是基于这样可行的 .
谢谢
5 回答
你不能 . XSS protection . javascript无法读取跨站点内容 . 没有主流浏览器会允许您这样做 . 对不起,但这是一个设计缺陷,你应该放弃这个想法 .
EDIT
请注意,如果您对加载到iframe的网站具有编辑权限,则可以使用postMessage(另请参阅browser compatibility)
有一个简单的方法 .
您创建了一个iframe,其内容类似于“http://your-domain.com/index.php?url=http://the-site-you-want-to-get.com/unicorn”
然后,您只需使用$ _GET获取此URL并使用file_get_contents显示内容($ _ GET ['url']);
您将获得一个域名与您的域名相同的iframe,然后您就可以使用$(“iframe”) . contents() . find(“body”)来操作内容 .
如果您可以访问iframed页面,则可以使用easyXDM之类的内容在iframe中进行函数调用并返回数据 .
如果您无权访问iframed页面,则必须使用服务器端解决方案 . 使用PHP,你可以做一些快速和脏的事情,如:
如果您可以访问已加载的域/ iframe,则可以使用window.postMessage在iframe和主窗口之间进行通信 .
在iframe中使用JavaScript读取DOM并通过postMessage将其发送到顶部窗口 .
更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage
有一个解决方法来实现它 .
首先,将iframe绑定到具有相对URL的目标页面 . 浏览器会将iframe中的网站视为与您的网站相同的域名 .
在您的Web服务器中,使用重写模块将请求从相对URL重定向到绝对URL . 如果您使用IIS,我建议您检查IIRF module .