获取跨域iframe的DOM内容
我有一个跨网站的iframe。 我想读取iframe的DOM,我相信这是可能的,因为使用检查器,我甚至可以修改iframe的DOM。 我尝试阅读的每一个方法,但是,我碰到相同的起源政策。 我想要的是从iframe中加载的本地DOM中的内容。 我认为这将是$(document.body).find('iframe').html()
,但是这是返回空string。
我真的希望有一种方法可以做到这一点,因为过去几天我一直在做的工作已经被预测,这是可行的。
谢谢
你不能。 XSS保护 。 跨网站的内容不能被JavaScript读取。 没有主要的浏览器将允许你。 我很抱歉,但这是一个devise缺陷,你应该放弃这个想法。
编辑
请注意,如果您已编辑访问加载到iframe的网站,您有两个select:
-
使用postMessage (另请参阅浏览器兼容性 )
-
CORS标题 :只需将以下标题添加到iframed网站:
Access-Control-Allow-Origin: http://foo.example
其中http://foo.example
是托pipe带有iframe的页面的域
有一个简单的方法。
-
你创build一个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等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
有一个解决方法来实现它。
-
首先,将您的iframe绑定到具有相对URL的目标页面。 浏览器会将您的网站的iframe中的网站视为同一个域名。
-
在您的Web服务器中,使用重写模块将请求从相对urlredirect到绝对url。 如果您使用IIS,我build议您检查IIRF模块 。