父页面如何跨域操作iframe中的子页面,并且该子页面是第三方的,我无法给它添加代码 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
qq286735628
V2EX    问与答

父页面如何跨域操作iframe中的子页面,并且该子页面是第三方的,我无法给它添加代码

  • &nsp;
  •   qq286735628 2012-08-22 10:02:28 +08:00 4944 次点击
    这是一个创建于 4852 天前的主题,其中的信息可能已经有所发展或是发生改变。
    父页面http://a.com/father.html
    子页面http://b.com/child.html

    父页面通过iframe加载子页面,但是浏览器安全限制,父页面无法对子页面进行操作。

    现行的很多方法,有通过postMessage的、有通过给子页面再加一个iframe做代理的。

    但是有一个问题,假如子页面是第三方的,我没有权限对child.html文件内容进行修改,也就是说上述的代理和postMessage都无法使用,那么父页面如何与子页面进行通信?
    9 条回复    1970-01-01 08:00:00 +08:00
    gonghao
        1
    gonghao  
       2012-08-22 10:09:23 +08:00
    那就彻底很无奈~~

    要不就搞个 proxy 把第三方代理到自己域名下,然后怎么着怎么着,都好搞,但是这样确实也会有个各种坑~
    qq286735628
        2
    qq286735628  
    OP
       2012-08-22 10:21:54 +08:00
    @gonghao 第三方是以CDN方式部署的,搞proxy的话,就把流量和请求的压力给弄上代理了~
    gonghao
        3
    gonghao  
       2012-08-22 11:02:42 +08:00   1
    @qq286735628 除了 proxy 真心没有其他办法了,这个十分蛋疼,之前遇过这种问题,再三权衡之后就是 proxy 了~
    sivacohan
        4
    sivacohan  
    PRO
       2012-08-22 19:01:27 +08:00
    你要干什么?不同情况有不同选择。单纯的按照你这么说,的确没办法了。可以考虑下flash,java applet
    qq286735628
        5
    qq286735628  
    OP
       2012-08-22 19:08:25 +08:00
    @gonghao @sivacohan

    其实我还想了一种方法,但是还没去尝试,同时不知道这种方法在性能上面会有多大影响~

    父页面http://a.com/father.html
    子页面http://a.com/child.html

    跨域资源htp://b.com/clild.html

    父页面通过Ajax请求,把我要的跨域资源http://b.com/child.html全部取下来,然后给iframe里面的http://a.com/child.html重新装上去。

    这样的操作之后,父页面再和子页面进行互相操作,就都在同域了。

    但是iframe里面的页面DOM节点重新生成了,手机上运行估计吃不消。
    watert
        6
    watert  
       2012-08-22 19:14:56 +08:00
    这个感觉跟用代理没有区别呀
    sivacohan
        7
    sivacohan  
    PRO
       2012-08-22 20:47:39 +08:00
    @qq286735628 你既然都抓取下来了,还iframe干什么啊?另外,你要在手机上用?什么手机啊?手机上支持ajax吗。。。不太清楚,没给手机做过。如果你这样做,不如直接在服务端玩了。
    gonghao
        8
    gonghao  
       2012-08-22 22:23:01 +08:00
    @qq286735628 a.com 的页面没办法 ajax 把 b.com 下的东西抓回来呀~
    qq286735628
        9
    qq286735628  
    OP
       2012-08-22 23:24:30 +08:00
    @watert 这样的话,代理就是浏览器自己罗,不过压力上来了

    @sivacohan 正常用ajax抓取之后,如果把拿到的东西是放在father.html里面的某个DIV里面,会丢失原http://b.com/child.html中的head标签里面的信息,例如一些CSS\JS等

    @gonghao 你这个提醒我了,XMLHttpRequest请求没法跨域

    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     4027 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 21ms UTC 05:30 PVG 13:30 LAX 21:30 JFK 00:30
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86