webview过滤广告终极招式

来源:互联网 发布:btsow最新域名 编辑:程序博客网 时间:2024/04/30 01:58

首先明白WebViewClient干啥的?
这货用于辅助WebView,处理各种通知、请求等事件

今天就是要重写她的方法!

这里主要交给javascript完成,那么javascript支持一定不能少!

WebSettings webSetting = webview.getSettings();
webSetting.setJavaScriptEnabled(true);

广告到底是啥?

明白了吧,就是一些div或者其他标签的块~~ 我们要把这些块去除 ~~

那么过滤广告的时机是何时?
页面加载完成的时候

 public void onPageFinished(WebView view, String url) {       blockAds(view);//过滤  }

blockAds首要的事情是view.getUrl(),通过url地址去匹配广告标签(Html标签属性)
关键就是构建javascript代码,懂web的都知道,Javascript中提供了访问文档标签的方法

        StringBuilder sb = new StringBuilder();        sb.append("javascript: ");        String[] alltag = tags.split(",");        for (int i = 0; i < alltag.length; i++) {            String adTag = alltag[i];            if (adTag.trim().length() > 0) {                adTag = adTag.trim();                if (adTag.contains("#")) {                    adTag = adTag.substring(adTag.indexOf("#") + 1);                    if (Build.VERSION.SDK_INT <  Build.VERSION_CODES.KITKAT) {//19                        sb.append("document.getElementById(\'").append(adTag).append("\').innerHTML=\'\';");                    } else {                        sb.append("document.getElementById(\'").append(adTag).append("\').remove();");                    }                } else if (adTag.contains(".")) {                    adTag = adTag.substring(adTag.indexOf(".") + 1);                    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {                        sb.append("var esc=document.getElementsByClassName(\'").append(adTag).append("\');for (i in esc){esc[i].innerHTML=\'\';};");                    } else {                        sb.append("var esc=document.getElementsByClassName(\'").append(adTag).append("\');for (var i = esc.length - 1; i >= 0; i--){esc[i].remove();};");                    }                } else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {                    sb.append("var esc=document.getElementsByTagName(\'").append(adTag).append("\');for (i in esc){esc[i].innerHTML=\'\';};");                } else {                    sb.append("var esc=document.getElementsByTagName(\'").append(adTag).append("\');for (var i = esc.length - 1; i >= 0; i--){esc[i].remove();};");                }            }        }

历史大事件

Android从4.4起提供基于Chromium实现的WebView。此前WebView基于WebKit实现。WebKit提供网页解析、布局和绘制以及JS运行等基础功能。Chromium在WebKit基础上为WebView提供进程、线程和渲染等基础构架。(大概是因为Android部门负责人从Andy Rubin变成了Chrome部门的主管Sundar Pichai了(现任谷歌CEO)吧)。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 .cn孩子初中上课不专心怎么办 娃儿小学二年级做不来怎么办 孩子不愿意看书沉迷电子产品怎么办 孩子自律和自控性差怎么办 婴儿7个月不喜欢吃东西怎么办 半岁宝宝太活泼怎么办 6个月宝宝太活泼怎么办 做nt宝宝太活跃怎么办 静不下心来学习怎么办 初中的孩子不爱学习怎么办 小孩不爱读书不做作业怎么办 母亲性格内向儿子也是内向怎么办 我儿子不爱吃怎么办啊 孩子练字就是记不住怎么办 孩子不愿意和小朋友玩怎么办 丈夫去世了婆婆不喜欢儿媳妇怎么办 高考看不下去书怎么办 在东莞读书读不成高中怎么办 嗓子哑了怎么办土方法 小孩舌头太长太大讲话不清楚怎么办 一周岁不喝奶粉怎么办 一岁的宝宝不吃奶粉怎么办 小孩不爱吃饭怎么办吃什么药 小孩这几天不爱吃饭怎么办 宝宝这几天不爱吃饭怎么办 想看书看不进去怎么办 宝宝3岁不爱看书怎么办 4岁宝宝不爱看书怎么办 1岁宝宝不爱看书怎么办 孩子一看书就哭怎么办 我不想读大专了怎么办 一年级的小孩不爱学习怎么办 高中的孩子不爱学习怎么办 9个月宝宝肠胃不好怎么办 孩子高烧过后干呕不爱吃饭怎么办 母乳涨奶发烧了怎么办 涨奶发烧了怎么办啊 2岁宝贝不吃饭怎么办 4个月的婴儿厌食怎么办 2个月婴儿厌食怎么办 3个月宝宝厌奶怎么办