Javascript 获取跨域iframe的DOM内容
我有一个跨域网站的iframe。我想阅读iframe的DOM,我认为这是可能的,因为使用inspector,我甚至可以修改iframe的DOM。然而,每次我试图阅读它时,都会遇到相同的来源政策。我想要的只是从iframe加载到本地DOM中的内容。我原以为它会像Javascript 获取跨域iframe的DOM内容,javascript,jquery,html,iframe,Javascript,Jquery,Html,Iframe,我有一个跨域网站的iframe。我想阅读iframe的DOM,我认为这是可能的,因为使用inspector,我甚至可以修改iframe的DOM。然而,每次我试图阅读它时,都会遇到相同的来源政策。我想要的只是从iframe加载到本地DOM中的内容。我原以为它会像$(document.body).find('iframe').html()一样简单,但这会返回空字符串 我真的希望有办法做到这一点,因为过去几天我一直在做的工作都是基于这一点 谢谢如果您有权访问iframe页面,您可以使用类似的方法在if
$(document.body).find('iframe').html()
一样简单,但这会返回空字符串
我真的希望有办法做到这一点,因为过去几天我一直在做的工作都是基于这一点
谢谢如果您有权访问iframe页面,您可以使用类似的方法在iframe中进行函数调用并返回数据 如果无法访问iframed页面,则必须使用服务器端解决方案。 使用PHP,您可以快速完成以下任务:
<?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?>
你不能。javascript无法读取跨站点内容。没有主要的浏览器会允许你这样做。很抱歉,这是一个设计缺陷,你应该放弃这个想法
编辑
请注意,如果您对加载到iframe中的网站具有编辑权限,则可以使用(另请参见)有一个解决方法来实现它
如果您有权访问加载的域/iframe,则可以使用window.postMessage在iframe和主窗口之间进行通信 在iframe中使用JavaScript读取DOM,并通过postMessage将其发送到顶部窗口 更多信息请点击这里:有一个简单的方法
$\u get
获取此url,并使用文件内容($\u get['url']);
您将获得一个与您的域相同的iframe,然后您将能够使用
$(“iframe”).contents().find(“body”)
来操作内容。我无法访问iframe页面,服务器端解决方案几乎是不可能的,因为我使用的是cocoahttpserver(服务器在iphone上运行)在这种情况下,这是不可能的。更多详细信息,请参阅。先生,您是一位学者,也是一位绅士。汉克斯分配了这个想法,这个答案和这个-,帮助我创建了一个解决方案!cheers@devmatt,使用file\u get\u contents($\u get['url'])
您可以获取页面内容,但无法获取DOM内容!回答错误。如果您是指设计(流)缺陷,那么不,它不是一个缺陷,这是为了安全而实现的。我知道它是为了安全而实现的,我的意思是基于这个概念的设计缺陷(thx)。在这种情况下,我误解了。作为参考,跨域同源策略意味着主机名、端口和协议必须都是相同的-(例如app1.example.com和app2.example.com不同;example.com和www.example.com不同)注意:您可以使用window.postMessage在iframe和主窗口之间进行通信。您的意思是服务器将http重定向发送到外部位置吗?如果是,它至少在Firefox 9中不起作用。我假设其他浏览器不会被这一点愚弄。这意味着在服务器上重写请求,因此客户端不知道它不是正确的URL。是的,您可以这样做-请您解释详细信息。非常感谢@很抱歉迟到,我没有注意到。1.创建一个php页面,通过GET参数显示您想要的页面内容。content.php
2.然后,在主页中添加一个iframe来加载此页面。
3.它将显示您想要的内容iframe.Content.php中的页面来自您的域,因此您可以使用JS操作iframe内容,而不会违反跨源策略。var$iframeBody=$(“iframe”).contents().find(“body”);$iframeBody.css(“背景”,蓝色);
如果出于任何原因您不想要iframe,您可以对php进行ajax调用too@Bharata:错误。如果将文件内容加载到iframe中,则可以像正常的同源iframe一样访问其内部DOM。请注意,如果使用此方法,请非常小心,因为这将允许您的服务器用作事实上的代理。Theref或者这应该在身份验证之后,并且/或者应该限制允许的网站列表。我们如何使用js在iframe中读取DOM?这是可能的,不是吗?您可以像平常一样读取DOM。例如document.getElementsByTagName(“BODY”)[0];之后,使用window.postMessage将刚刚在iframed窗口中读取的DOM对象发送到承载iframe窗口的窗口。