现在大部分的android平台的浏览器都具有广告过滤的功能,同时大部分网站都有广告。广告行业是个盈利巨大的产业,就我看来,现在绝大部分的互联网产品,一般有两种营利模式:免费有广告和会员无广告;他们大部分(包括网站和APP等)盈利来源就是广告。作为用户而言,对广告十分反感,但是互联网上的服务我们能免费享受与支撑这些服务得以延续与成长却得益于广告。

百度了一下,网上竟然没有Android浏览器屏蔽广告的代码实现,所以极客人只能自己动手了。网页上的广告一般是站长在网页植入一段js代码,要想屏蔽广告只需要将这些js屏蔽掉即可。

WebViewClient的几个回调函数

要想对Webview实现一些高级操作,首先要学习WebViewClient的用法,这是Webview几个常用回调函数

1、public boolean shouldOverrideUrlLoading(WebView view, String url): 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。

2、public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error):

重写此方法可以让webview处理https请求。

3、public boolean shouldOverrideKeyEvent(WebView view, KeyEvent event):重写此方法才能够处理在浏览器中的按键事件。

4、 public void onLoadResource(WebView view, String url):在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。

5、 public void onPageStarted(WebView view, String url, Bitmap favicon) :在页面加载开始时调用。

6、public void onPageFinished(WebView view, String url) :在页面加载结束时调用。

初看上面的回调函数,极客人发现了一个巨大的坑,拦截广告就是拦截加载广告的js,上面的onLoadResource似乎是很合适的函数,只要判断onLoadResource的参数url是否是加载广告js的即可,如果不是广告相关的url正常加载,如果是则不加载。但是在使用onLoadResource之后才发现根本不行。

这里引用WebViewClient另外一个回调函数:public WebResourceResponse shouldInterceptRequest(WebView view, String url)

shouldInterceptRequest有两种重载。

public WebResourceResponse shouldInterceptRequest (WebView view, String url)从API 11开始引入,API 21弃用

public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)从API 21开始引入

这里极客人暂且使用shouldInterceptRequest (WebView view, String url)完成对webview广告的拦截。

拦截广告资源URL

在Webview加载资源时会回调shouldInterceptRequest函数,我们可以通过重写shouldInterceptRequest函数实现对webview的资源请求进行处理。进行处理后返回数据。如果主程序返回的数据为null,WebView会自行请求网络加载资源。这里有个坑:不是shouldInterceptRequest函数返回null就能屏蔽掉请求!正确的屏蔽请求的方式:

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

url = url.toLowerCase();

if (!ADFilterTool.hasAd(context, url)) {

return super.shouldInterceptRequest(view, url);//正常加载

}else{

return new WebResourceResponse(null,null,null);//含有广告资源屏蔽请求

}

}

1

2

3

4

5

6

7

8

9

@Override

publicWebResourceResponseshouldInterceptRequest(WebViewview,Stringurl){

url=url.toLowerCase();

if(!ADFilterTool.hasAd(context,url)){

returnsuper.shouldInterceptRequest(view,url);//正常加载

}else{

returnnewWebResourceResponse(null,null,null);//含有广告资源屏蔽请求

}

}

下面是极客人写的屏蔽广告的NoAdWebViewClient类:只需使用webview.setWebViewClient(NoAdWebViewClient webclient)即可屏蔽指定webview的广告。

NoAdWebViewClient 屏蔽广告

package cn.wangbaiyuan.webviewadblock;

import android.content.Context;

import android.util.Log;

import android.webkit.WebResourceResponse;

import android.webkit.WebView;

import android.webkit.WebViewClient;

/**

* Created by BrainWang on 05/01/2016.

*/

public class NoAdWebViewClient extends WebViewClient {

private String homeurl;

private Context context;

public NoAdWebViewClient(Context context,String homeurl) {

this.context = context;

this.homeurl = homeurl;

}

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

url = url.toLowerCase();

if(!url.contains(homeurl)){

if (!ADFilterTool.hasAd(context, url)) {

return super.shouldInterceptRequest(view, url);

}else{

return new WebResourceResponse(null,null,null);

}

}else{

return super.shouldInterceptRequest(view, url);

}

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

packagecn.wangbaiyuan.webviewadblock;

importandroid.content.Context;

importandroid.util.Log;

importandroid.webkit.WebResourceResponse;

importandroid.webkit.WebView;

importandroid.webkit.WebViewClient;

/**

* Created by BrainWang on 05/01/2016.

*/

publicclassNoAdWebViewClientextendsWebViewClient{

privateStringhomeurl;

privateContextcontext;

publicNoAdWebViewClient(Contextcontext,Stringhomeurl){

this.context=context;

this.homeurl=homeurl;

}

@Override

publicWebResourceResponseshouldInterceptRequest(WebViewview,Stringurl){

url=url.toLowerCase();

if(!url.contains(homeurl)){

if(!ADFilterTool.hasAd(context,url)){

returnsuper.shouldInterceptRequest(view,url);

}else{

returnnewWebResourceResponse(null,null,null);

}

}else{

returnsuper.shouldInterceptRequest(view,url);

}

}

}

判断URL是否含广告的ADFilterTool类:该类通过判断url是否包含在广告拦截库中

ADFilterTool.java

ADFilterTool判断URL是否含广告

package cn.wangbaiyuan.webviewadblock;

import android.content.Context;

import android.content.res.Resources;

import android.util.Log;

/**

* Created by BrainWang on 05/01/2016.

*/

public class ADFilterTool {

public static boolean hasAd(Context context, String url) {

Resources res = context.getResources();

String[] adUrls = res.getStringArray(R.array.adBlockUrl);

for (String adUrl : adUrls) {

if (url.contains(adUrl)) {

return true;

}

}

return false;

}

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

packagecn.wangbaiyuan.webviewadblock;

importandroid.content.Context;

importandroid.content.res.Resources;

importandroid.util.Log;

/**

* Created by BrainWang on 05/01/2016.

*/

publicclassADFilterTool{

publicstaticbooleanhasAd(Contextcontext,Stringurl){

Resourcesres=context.getResources();

String[]adUrls=res.getStringArray(R.array.adBlockUrl);

for(StringadUrl:adUrls){

if(url.contains(adUrl)){

returntrue;

}

}

returnfalse;

}

}

广告url资源文件(广告拦截库可自行百度更新):AdUrlString.xml

所谓广告拦截库,实际上是请求广告资源的url合集,网络上有大量的广告拦截库,读者可以定期更新一下文件来实现对广告的高效过滤。本文屏蔽的方式比较粗暴,凡是含有广告资源的域名统统禁止。要想实现更精准的过滤,访友你可以使用通配符匹配url的方式进行拦截,现在PC端的浏览器正是这样做的。

ubmcmm.baidustatic.com

cpro2.baidustatic.com

cpro.baidustatic.com

s.lianmeng.360.cn

nsclick.baidu.com

pos.baidu.com

cbjs.baidu.com

cpro.baidu.com

images.sohu.com/cs/jsfile/js/c.js

union.sogou.com/

sogou.com/

a.baidu.com

c.baidu.com

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

ubmcmm.baidustatic.com

cpro2.baidustatic.com

cpro.baidustatic.com

s.lianmeng.360.cn

nsclick.baidu.com

pos.baidu.com

cbjs.baidu.com

cpro.baidu.com

images.sohu.com/cs/jsfile/js/c.js

union.sogou.com/

sogou.com/

a.baidu.com

c.baidu.com

安卓网页广告拦截_Android webview广告过滤的实现相关推荐

  1. android广告拦截原理,WebView 广告拦截浅析

    前言 查豆瓣 使用的是 WebView 加载页面,在豆瓣的移动页面中存在两到三个的广告轮播图,比较影响阅读体验.所以开始着手看看怎么屏蔽掉广告. 在 WebView 中有以下三个方法可以考虑: fun ...

  2. html广告拦截网吧,网吧广告拦截软件是怎么安装的

    4.默认不拦截广告,如需要拦截,请打开桌面上的广告关闭器控制台,选择需要拦截的广告分类,右键选择拦截. 5.程序升级:直接使用安装包,选择修复或升级,会自动替换新的客户端程序到开机命令 6.程序卸载: ...

  3. Android 抛弃原生WebView,使用腾讯X5内核、并加入广告拦截。

    大家都不知道原生的WebView 存在各种坑.各种适配问题. 最近在使用,总会出现DNS被拦截的情况.预览了各个大神的论坛与博客. 发现可以更改WebView内核.找到了比较火的两个. 分别是:腾讯X ...

  4. location 拦截所有_终极广告拦截软件来袭!AdGuard

    世界上最高级的广告拦截程序! AdGuard 是摆脱恼人广告,在线跟踪,保护您远离恶意软件的最佳方式.AdGuard 使您网络冲浪更快速,更安全,更安逸! 团购!!5人团!!AdGuard 广告拦截隐 ...

  5. 错误,误解和攻击:分析广告拦截系统的众包过程

    错误,误解和攻击:分析广告拦截系统的众包过程 "众包"(crowdsourcing):这一概念是由美国<连线>杂志的记者杰夫·豪(Jeff Howe)在 2006年6月 ...

  6. 推荐一个谷歌浏览器插件:AdGuard 广告拦截器(类似与火绒的广告拦截)

    插件地址:AdGuard 广告拦截器 下面这个图标就是这个插件 AdGuard 广告拦截器 这个广告拦截器可以和火绒一样选择元素进行记录,然后这个广告就会被拦截. 例如:知乎.掘金这类,会弹登录窗口, ...

  7. 安卓网页广告拦截_拦截烦人的网页广告,增加上网体验

    本号所有资源版权归原作者所有,如有侵权请加小编微信删除.本号免费分享,仅供学习交流,下载后24小时内请自觉删除,切勿用于商业用途,否则后果自负! 今天重新整理分享几大主流浏览器和IE浏览器拦截广告的方 ...

  8. Android webview广告过滤的实现

    WebViewClient的几个回调函数(本文章转自  某某某  ) 要想对Webview实现一些高级操作,首先要学习WebViewClient的用法,这是Webview几个常用回调函数 1.publ ...

  9. adguard和adblock哪个好_世界上最高级的广告拦截程序AdGuard过滤规则分享

    世界上最高级的广告拦截程序AdGuard过滤规则分享 2020-01-22 13:49:44 5点赞 80收藏 15评论 创作立场声明:原创心得 ## 前言 我和很多人一样一开始用Maxthon傲游浏 ...

最新文章

  1. javascript实战pdf_javascript该怎么学呢?学习Js之路
  2. 百度ERNIE新突破,登顶中文医疗信息处理权威榜单CBLUE冠军
  3. hadoop的运行机制
  4. Akka型演员:探索接收器模式
  5. 习惯了的几个火狐插件
  6. 用友账套和报表服务器显示不同,用友T3ufo报表提示“服务器出现意外情况”
  7. 川土微电子 | 隔离电源的辐射抑制设计参考(四)
  8. python地震数据处理_Python爬虫之实时地震数据
  9. 从 iTunes 和 Finder 断开 iPhone 连接的三种方法
  10. html文本打印lt;igt;字段,6-HTMLlt; formgt;表单标签和属性
  11. OpenStack开源云平台
  12. java黄金分割_黄金分式与黄金分割数(Java实现)
  13. Foo = Foo||Bar ,这行代码是什么意思?为什么要这样写?
  14. win10系统做T3服务器,win10如何安装用友t3_win10安装用友t3教程
  15. 抽象类 与 委托 蛋蛋的忧桑
  16. 重构第26天 移除双重否定(Remove Double Negative)
  17. css网站结课设计,毕业设计(论文)-《DIV+CSS》课程网站的开发.doc
  18. C语言调用函数如何返回多个变量值?【基础】
  19. 解决无法直接打开EXCEL文件的问题
  20. 在Html显示拼音的方法

热门文章

  1. 数据仓库架构和建设方法
  2. CSS常用英文字体介绍
  3. IIS 超简单部署免费https Let's Encrypt
  4. 学习笔记-ThinkPHP总结
  5. 西游记团队中如果需要裁掉一个人,会先裁掉谁?
  6. Hadoop大数据从入门到精通-任亮-专题视频课程
  7. 我在华为OD的753天(已完结)
  8. 新浪微博橙v升级金v的多种方法
  9. 什么是爱,什么是爱情,有谁能告我?
  10. Java 打 jar 包的几种方式详解