V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a JavaScript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
JavaScript 权威指南第 5 版
Closure: The Definitive Guide
PHPer233
V2EX  ›  JavaScript

js 能不能获取 iframe 框架的 html 源码?

  •  1
     
  •   PHPer233 · 2018-10-24 16:46:59 +08:00 via iPhone · 5699 次点击
    这是一个创建于 2252 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在 A 网页的页面上用 js 创建一个 iframe,这个 iframe.src 等于 B 网页的某个页面。我想在 iframe 加载完成后在 A 页面上用 js 获取 iframe 的 html 内容。这个功能弄了半天没搞出来,特来请教一下。
    20 条回复    2018-10-25 00:13:04 +08:00
    xiaoxinshiwo
        1
    xiaoxinshiwo  
       2018-10-24 17:27:51 +08:00
    iframe.contentWindow, 获取 iframe 的 window 对象
    iframe.contentDocument, 获取 iframe 的 document 对象
    不能吗?
    shyangs
        2
    shyangs  
       2018-10-24 17:33:40 +08:00
    As 1F.
    BTW, 有沒跨域.
    Seanfuck
        3
    Seanfuck  
       2018-10-24 17:39:54 +08:00
    跨域的话肯定不行
    duan602728596
        4
    duan602728596  
       2018-10-24 17:57:44 +08:00 via iPhone
    不要忘了,获取要在 iframe 的 load 事件内执行
    PHPer233
        5
    PHPer233  
    OP
       2018-10-24 17:59:01 +08:00 via iPhone
    @Seanfuck A 和 B 是两个不同的域名。这应该是跨域了吧?真的没办法操作吗?
    yoshiyuki
        6
    yoshiyuki  
       2018-10-24 18:01:36 +08:00
    可以让后端帮你拿呀
    shintendo
        7
    shintendo  
       2018-10-24 18:03:29 +08:00
    跨域不能的吧
    不然你在自己网页上放个隐藏 iframe,指向 X 站,然后用户又有 X 站的登录状态,那你不就拿到他的 X 站页面上的内容了
    djs
        8
    djs  
       2018-10-24 18:40:40 +08:00
    后台抓呗
    097ecom
        9
    097ecom  
       2018-10-24 18:43:14 +08:00
    如果 iframe 里面的 URL 和你网站的网址为同一个,那就可以,否则不行,跨域了
    agdhole
        10
    agdhole  
       2018-10-24 18:47:05 +08:00
    跨域会拦截
    zhzer
        11
    zhzer  
       2018-10-24 19:01:11 +08:00 via Android
    不能,别说 iframe,本窗口中的 js 能拿到手的文本都是浏览器处理完的
    Foxkeh
        12
    Foxkeh  
       2018-10-24 19:04:22 +08:00 via iPhone
    请百度 iframe 父子兄弟调用
    t6attack
        13
    t6attack  
       2018-10-24 19:13:03 +08:00
    你实在要想实现的话,把这个扩展装上,开关打开,就可以了。
    https://chrome.google.com/webstore/detail/nlfbmbojpeacfghkpbjhddihlkkiljbi
    loginv2
        14
    loginv2  
       2018-10-24 19:14:25 +08:00 via Android
    你拿不到,但是它可以主动给你
    t6attack
        15
    t6attack  
       2018-10-24 19:27:13 +08:00
    这个问题,正好可以解释下浏览器跨域限制的逻辑。其实不难理解。

    如果按你说的这个方法,这样可以的话。那么你访问一个网站,网站方就可以随意构建 0 像素 iframe,指向任意网站,并把代码传回服务端。这就相当于把你变成代理了。只要你停留在页面上,网站方就可以以 你的 IP 身份 上网、爬取信息、甚至黑客行为。。那样互联网不就乱套了么?
    SoloCompany
        16
    SoloCompany  
       2018-10-24 19:39:41 +08:00 via iPhone
    如果你可以控制 iframe 的内容,那么可以使用 sendmessage 跨域传递消息
    PHPer233
        17
    PHPer233  
    OP
       2018-10-24 19:43:53 +08:00 via iPhone
    @t6attack 有道理
    cdwyd
        18
    cdwyd  
       2018-10-24 19:55:43 +08:00
    其实是可以拿到的,用的是安卓部分早期浏览器的一个漏洞,亲测可以拿到别人网站的源代码。
    具体代码现在估计找不到了,不过搂着可以按这个方向搜索下资料
    OctopusGO
        19
    OctopusGO  
       2018-10-24 19:58:14 +08:00 via Android
    可以,我以前遇到过这个问题,我明天上班了把以前的代码给你
    PHPer233
        20
    PHPer233  
    OP
       2018-10-25 00:13:04 +08:00 via iPhone
    @OctopusGO 真的吗?谢谢啦
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2722 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:25 · PVG 08:25 · LAX 16:25 · JFK 19:25
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.