Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取跨域iframe的DOM内容_Javascript_Jquery_Html_Iframe - Fatal编程技术网

Javascript 获取跨域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

我有一个跨域网站的iframe。我想阅读iframe的DOM,我认为这是可能的,因为使用inspector,我甚至可以修改iframe的DOM。然而,每次我试图阅读它时,都会遇到相同的来源政策。我想要的只是从iframe加载到本地DOM中的内容。我原以为它会像
$(document.body).find('iframe').html()
一样简单,但这会返回空字符串

我真的希望有办法做到这一点,因为过去几天我一直在做的工作都是基于这一点


谢谢

如果您有权访问iframe页面,您可以使用类似的方法在iframe中进行函数调用并返回数据

如果无法访问iframed页面,则必须使用服务器端解决方案。 使用PHP,您可以快速完成以下任务:

    <?php echo file_get_contents('http://url_of_the_iframe/content.php'); ?> 

你不能。javascript无法读取跨站点内容。没有主要的浏览器会允许你这样做。很抱歉,这是一个设计缺陷,你应该放弃这个想法

编辑


请注意,如果您对加载到iframe中的网站具有编辑权限,则可以使用(另请参见)

有一个解决方法来实现它

  • 首先,将iframe绑定到具有相对url的目标页面。浏览器会将iframe中的网站与您的网站视为同一个域

  • 在web服务器中,使用重写模块将请求从相对url重定向到绝对url。如果您使用IIS,我建议您查看


  • 如果您有权访问加载的域/iframe,则可以使用window.postMessage在iframe和主窗口之间进行通信

    在iframe中使用JavaScript读取DOM,并通过postMessage将其发送到顶部窗口

    更多信息请点击这里:

    有一个简单的方法

  • 您创建了一个iframe,它的源代码如下“

  • 然后,您只需使用
    $\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窗口的窗口。