我有一个用于跨域网站的iframe。我想读取iframe的DOM,我相信这是可能的,因为使用检查器,我什至可以修改iframe的DOM。但是,无论尝试哪种方式,我都会遇到相同的原始策略。我想要的只是从iframe加载到本地DOM中的内容。我以为它就像$(document.body).find('iframe').html()一样简单,但是返回的是空字符串。

我真的希望有一种方法可以这样做,因为我最近几天一直在做的工作已经确定可以做到。

感谢

评论

是的,您可以执行此操作-请参见stackoverflow.com/a/17262334/888177

#1 楼

你不能XSS保护。跨站点内容无法用javascript读取。没有主流的浏览器会允许您这样做。抱歉,但这是一个设计缺陷,您应该放弃这个主意。

编辑

请注意,如果您具有对加载到iframe中的网站的编辑权限,您可以使用postMessage(另请参阅浏览器兼容性)

评论


如果您的意思是设计(流程)缺陷,那么不,这不是缺陷,这是出于安全性目的而实施的。

–伊布
2011年5月29日23:08

我知道它是出于安全原因而实现的,我的意思是基于此概念的设计缺陷(对此表示反对)。

–MáthéEndre-Botond
2011年5月29日23:30

那样的话我就会误会了

–伊布
2011年5月29日23:32

作为参考,跨域same-origin-policy意味着主机名,端口和协议必须全部相同-en.wikipedia.org/wiki/Same-origin_policy(例如,app1.example.com和app2.example.com不同; example.com和www.example.com是不同的)

–科蒂斯·雅洛普(Curtis Yallop)
16-10-26在18:08

注意:您可以使用window.postMessage在iframe和主窗口之间进行通信。

–科蒂斯·雅洛普(Curtis Yallop)
16-10-26在18:10

#2 楼

有一个简单的方法。


您创建一个iframe,其源代码类似于“ http://您的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")来操作内容。

评论


您能解释一下细节吗?非常感谢你@@

– bfhaha
16 Mar 24 '16 at 15:50

对不起,我没注意到。 1.创建一个php页面,该页面显示来自GET参数的所需页面内容。 content.php <?php echo file_get_contents($ _ GET ['url']); ?> 2.然后,在您的主页中,添加将加载此页面的iframe。