android开发分享Android WebView拦截iframe标签内部跳转教程

最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要android拦截iframe内部的跳转,自己做处理。比如,下面是一段html代码,嵌套这iframe标签,s

最近项目里有个广告位需要动态配置,后台给了一段 html 嵌套iframe标签的代码,需要android拦截iframe内部的跳转,自己做处理。

比如,下面是一段html代码,嵌套这iframe标签,src就是跳转地址,我现在就要当你点击该网址的时候做拦截,自己做处理而不是跳转。

  <html>   <iframe src="https://www.jb51.net/" frameborder='0' scrolling='no' width='100%' height='300'>  </iframe>  </html>  

oh,我还是第一次知道iframe标签,不过想着应该和普通拦截h5差不多,兴致勃勃的就开始撸代码了,但是无论怎么配置webview,还是重写 shouldoverrideurlloading ,就是拦截不了iframe里的网址。。。后来研(bai)究(du)了很久,终于拦截到了。

实现方法:

首先,你的webview要 setwebviewclient ,重写

  public boolean shouldoverrideurlloading(webview view, webresourcerequest request) {} 方法,然后setwebchromeclient,重写oncreatewindow方法,在里面创建新的wevview,加入到webview里,给新的webview setwebviewclient,再重写shouldveerrideurlloading方法,在这里拦截。    webview.setwebchromeclient(new webchromeclient(){          @override     public boolean oncreatewindow(webview webview, boolean isdialog, boolean isusergesture, message resultmsg) {      webview newwebview = new webview(getactivity());      webview.addview(newwebview);         webview.webviewtransport transport = (webview.webviewtransport) resultmsg.obj;      transport.setwebview(newwebview);      resultmsg.sendtotarget();         newwebview.setwebviewclient(new webviewclient(){          @override       public boolean shouldoverrideurlloading(webview webview, string url) {        //todo 在这里实现你的拦截方法        if (url.contains("https://www.jb51.net")){         toast("拦截到了" + url);         intent intent = new intent(getactivity(), commonwebviewactivity.class);         intent.putextra("url",url);         startactivity(intent);           }else {         webview.loadurl(url);        }        return true;       }      });         return true;     }    });

完整的代码如下:

  private void initwebview(webview webview) {    //启用支持javascript    websettings settings = webview.getsettings();    settings.setjavascriptenabled(true);    settings.setjavascriptcanopenwindowsautomatically(true);    settings.setsupportzoom(false); //支持缩放    settings.setbuiltinzoomcontrols(false); //支持手势缩放    settings.setdisplayzoomcontrols(false); //是否显示缩放按钮    settings.setdefaulttextencodingname("utf-8"); //设置文本编码    settings.setusewideviewport(false); //将图片调整到适合webview的大小    settings.setloadwithoverviewmode(true); //自适应屏幕    settings.setdomstorageenabled(true);    settings.setsaveformdata(true);    settings.setsupportmultiplewindows(true);    settings.setappcacheenabled(true);    settings.setpluginstate(websettings.pluginstate.on);//支持插件    settings.setcachemode(websettings.load_no_cache); //不适用缓存    settings.setlayoutalgorithm(websettings.layoutalgorithm.single_column);//支持内容重新布局    webview.setoverscrollmode(view.over_scroll_never); // 取消webview中滚动或拖动到顶部、底部时的阴影    webview.setscrollbarstyle(view.scrollbars_inside_overlay); // 取消滚动条白边效果    // >= 19(sdk4.4)启动硬件加速,否则启动软件加速    if (build.version.sdk_int >= build.version_codes.kitkat) {     webview.setlayertype(view.layer_type_hardware, null);     settings.setloadsimagesautomatically(true); //支持自动加载图片    } else {     webview.setlayertype(view.layer_type_software, null);     settings.setloadsimagesautomatically(false);    }       webview.setwebviewclient(new webviewclient() {     @override     public void onloadresource(webview view, string url) {      super.onloadresource(view, url);      log.w("webview==onloadresource===url=" + url);     }        @override     public void onreceivedsslerror(webview webview, sslerrorhandler sslerrorhandler, sslerror sslerror) {      sslerrorhandler.proceed(); // 接受所有网站的证书     }        @override     public boolean shouldoverrideurlloading(webview view, webresourcerequest request) {            if (request.geturl().tostring().contains("https://www.baidu.com")){       toast("拦截到了baidu");             }else {       webview.loadurl(request.geturl().tostring());      }         return true;     }    });       webview.setwebchromeclient(new webchromeclient(){          @override     public boolean oncreatewindow(webview webview, boolean isdialog, boolean isusergesture, message resultmsg) {      webview newwebview = new webview(getactivity());      webview.addview(newwebview);         webview.webviewtransport transport = (webview.webviewtransport) resultmsg.obj;      transport.setwebview(newwebview);      resultmsg.sendtotarget();         newwebview.setwebviewclient(new webviewclient(){          @override       public boolean shouldoverrideurlloading(webview webview, string url) {                if (url.contains("//www.jb51.net")){         toast("拦截到了" + url);         intent intent = new intent(getactivity(), commonwebviewactivity.class);         intent.putextra("url",url);         startactivity(intent);           }else {         webview.loadurl(url);        }        return true;       }      });         return true;     }    });   }

以上这篇android webview拦截iframe标签内部跳转教程就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持<计算机技术网(www.ctvol.com)!!>。

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/addevelopment/898689.html

(0)
上一篇 2021年10月22日
下一篇 2021年10月22日

精彩推荐