【问题标题】:What is "isForMainFrame" request in Android WebViewClient property meaning?Android WebViewClient 属性中的“isForMainFrame”请求是什么意思?
【发布时间】:2016-10-13 00:36:02
【问题描述】:

isForMainFrame 是什么意思(android-21)?

请求是否针对主框架。例如,对于 iframe 将为 false。

不清楚,因为对于下面的日志,它为主机请求返回false

和android-19中的isMainFrame一样吗?

对于“google.com”(根据我的语言环境立即重定向到“google.ru”),我得到了 android-19 的以下日志:

3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=true for http://www.google.com/
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://ssl.gstatic.com/gb/images/qi2_00ed8ca1.png
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/images/branding/googlelogo/2x/googlelogo_color_160x56dp.png
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/images/nav_logo242_hr.png
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.gstatic.com/og/_/js/k=og.mob.en_US.p8Smm-clGwA.O/rt=j/m=md/exm=mih,mab,meb/d=1/ed=1/rs=AA2YrTsvrSisM1LDBap6j28t9xwsb4oJBg
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/xjs/_/js/k=xjs.qs.ru.WqzjCT34eOw.O/m=sx,c,sb_mob,bct,cdos,elog,hsm,jsa,mbsf,r,qsm,d,csi/am=AIG2TGBhALBBYgn5FBACKAE/rt=j/d=1/t=zcms/rs=ACT90oHeC71MlDyUp6g3gXk23kbF4ygyvw
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/xjs/_/js/k=xjs.qs.ru.WqzjCT34eOw.O/m=sy7,sy13,em2,sy12,aa,abd,sy55,sy54,sy53,sy57,em10,async,sy280,sy320,sy319,dvl,sy425,foot,ipv6,shm/am=AIG2TGBhALBBYgn5FBACKAE/rt=j/d=0/t=zcms/rs=ACT90oHeC71MlDyUp6g3gXk23kbF4ygyvw
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/images/branding/product/ico/googleg_lodp.ico
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/images/nav_logo242.png
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.google.ru/gen_204?v=3&s=mobilewebhp&atyp=csi&ei=7kT-V-OSNcOfsgHEgL2gAw&imc=1&imn=1&imp=1&adh=&xjs=init.251.13.sb_mob.199.dvl.23.c.8.async.6.jsa.5&ima=1&rt=xjsls.161,prt.164,iml.716,dcl.574,xjses.1086,xjsee.1535,xjs.1536,ol.1873,aft.716,wsrt.1937,cst.728,dnst.1,rqst.219,rspt.36,sslt.721,rqstt.1645,unt.862,cstt.916,dit.2155
3068-3088 D/IoThreadClientInvocationHandler: isMainFrame=false for https://www.gstatic.com/og/_/ss/k=og.mob.-1m1er1bg50qhy.L.W.O/m=md/excm=mih,mab,meb/d=1/ed=1/rs=AA2YrTuS2ZHRm9kj5jyes52ZN2R47G8RQQ

对于 android-21 我可以看到:

1725-1851 D/IoThreadClientInvocationHandler: 21: true for http://www.google.com/
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/images/branding/googlelogo/2x/googlelogo_color_160x56dp.png
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://ssl.gstatic.com/gb/images/qi2_00ed8ca1.png
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/images/nav_logo242_hr.png
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.gstatic.com/og/_/js/k=og.mob.en_US.p8Smm-clGwA.O/rt=j/m=md/exm=mih,mab,meb/d=1/ed=1/rs=AA2YrTsvrSisM1LDBap6j28t9xwsb4oJBg
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/xjs/_/js/k=xjs.qs.ru.WqzjCT34eOw.O/m=sx,c,sb_mob,bct,cdos,elog,hsm,jsa,mbsf,r,qsm,d,csi/am=AIG2ZGBhALBBYgn5FBACKAE/rt=j/d=1/t=zcms/rs=ACT90oGqh459Mg-Bg7N2WXgWV78Tvd2J1A
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/xjs/_/js/k=xjs.qs.ru.WqzjCT34eOw.O/m=sy7,sy13,em2,sy12,aa,abd,sy55,sy54,sy53,sy57,em10,async,sy280,sy320,sy319,dvl,sy425,foot,ipv6,shm,udlg/am=AIG2ZGBhALBBYgn5FBACKAE/rt=j/d=0/t=zcms/rs=ACT90oGqh459Mg-Bg7N2WXgWV78Tvd2J1A
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/images/nav_logo242.png
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/gen_204?v=3&s=mobilewebhp&atyp=csi&ei=Qkb-V4-7AoOisAGdzq24Bg&imc=1&imn=1&imp=1&adh=&xjs=init.181.13.sb_mob.151.c.12.mbsf.4.jsa.4.async.4&conn=unknown&ima=1&rt=xjsls.146,prt.155,iml.4995,dcl.4791,xjses.5597,xjsee.6069,xjs.6070,ol.6264,aft.4995,wsrt.1045,cst.155,dnst.0,rqst.127,rspt.9,sslt.147,rqstt.837,unt.671,cstt.681,dit.1305
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.gstatic.com/og/_/ss/k=og.mob.-1m1er1bg50qhy.L.W.O/m=md/excm=mih,mab,meb/d=1/ed=1/rs=AA2YrTuS2ZHRm9kj5jyes52ZN2R47G8RQQ
1725-1851 D/IoThreadClientInvocationHandler: 21: false for https://www.google.ru/images/branding/product/1x/gsa_shadowed_144dp.png

我希望看到true 的所有资源,因为它是来自“google.ru”的主(和单个)框架的资源。我错了吗?

【问题讨论】:

    标签: android google-chrome web webview chromium


    【解决方案1】:

    isForMainFrame 方法实际上是继承自 WebKit。比如这里是Apple docs

    因此,这里的MainFrame指的是WebKit的概念,也就是根WebFrame。

    在幕后,WebFrame 对象封装了单个框架元素中包含的内容。 WebFrame 对象的层次结构用于对整个网页进行建模,其中根称为主框架

    您可以在the docs找到更多相关信息

    根据这个定义,只有初始请求是针对“主框架”的,其余的都是针对子 WebFrame 的请求。

    【讨论】:

    • 所以这将是对带有isForMainFrame=true 和所有其他请求isForMainFrame=false(图像、css、脚本等)的网页 url 的 1 次调用?
    • @4ntoine 我从 WebKit 文档和源代码中了解到,是的
    • 是否有可能检测到要加载的元素的框架(main/iframe)?
    猜你喜欢
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-06-12
    • 1970-01-01
    • 2016-10-31
    • 2011-07-19
    • 2011-05-16
    • 2013-06-13
    相关资源
    最近更新 更多