首页 文章

获取跨域iframe的DOM内容[重复]

提问于
浏览
58

这个问题在这里已有答案:

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

我真的希望有一种方法可以做到这一点,因为我过去几天一直在做的工作是基于这样可行的 .

谢谢

5 回答

  • -3

    你不能 . XSS protection . javascript无法读取跨站点内容 . 没有主流浏览器会允许您这样做 . 对不起,但这是一个设计缺陷,你应该放弃这个想法 .

    EDIT

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

  • 4

    有一个简单的方法 .

    您将获得一个域名与您的域名相同的iframe,然后您就可以使用$(“iframe”) . contents() . find(“body”)来操作内容 .

  • 60

    如果您可以访问iframed页面,则可以使用easyXDM之类的内容在iframe中进行函数调用并返回数据 .

    如果您无权访问iframed页面,则必须使用服务器端解决方案 . 使用PHP,你可以做一些快速和脏的事情,如:

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

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

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

    更多信息:https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

  • 7

    有一个解决方法来实现它 .

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

    • 在您的Web服务器中,使用重写模块将请求从相对URL重定向到绝对URL . 如果您使用IIS,我建议您检查IIRF module .

相关问题