android中webview打开有广告,Android WebView显示广告

参考文档:

1.http://wangbaiyuan.cn/realization-of-android-webview-advertising-filtering.html#prettyPhoto   Android webview广告过滤的实现

2.http://www.jianshu.com/p/d793c8d4ff81       Android快速去掉WebView上的烦人广告

项目中用到了webview加载前端界面,也就是Hybrid  App。

但是在webview显示的界面,出现了广告,在界面上边,或者下边,严重影响用户体验,所以需要去掉广告。

参考了文档1的实现方案,文档1是通过判断广告的url进行实现的。

我进行了一些改变,使用到了正则表达式,也是文档1最后的建议。

实现之后,进行了测试,感觉这个方案是可行的

public WebResourceResponse shouldInterceptRequest(WebView view, String url) 方法会回调给你web界面所有的请求,对没一个请求进行判断,过滤,不是合法的url,禁止请求。

下面是我的实现方案:

1.过滤广告的工具类

/**

* 过滤广告

*

* Created by MyPC on 2017/4/18.

*/

public class ADFilterTool {

/**

* 正则表达式

*/

private static String PATTERN = "";

static {

initPattern();

}

/**

* 初始化pattern

*/

private static void initPattern() {

PATTERN = getPatternStr();

}

/**

* 判断url的域名是否合法

*

* 域名是否合法:自己项目中使用的域名,为合法域名;其它域名皆为不合法域名,进行屏蔽

*

* @param url

* @return

*/

public static boolean hasNotAd(String url) {

if (TextUtils.isEmpty(url)) {

return false;

}

if (TextUtils.isEmpty(PATTERN)) {

initPattern();

}

if (Pattern.matches(PATTERN, url)) {

return true;

}

return false;

}

/**

* 拼接正则表达式

*

* @return

*/

private static String getPatternStr() {

String[] adUrls = App.getInstance().getResources().getStringArray(R.array.legal_domain);

if (null != adUrls && adUrls.length > 0) {

StringBuffer sb = new StringBuffer("^(https|http)://.*(");

for (String a : adUrls) {

if (null != a && a.length() > 0) {

sb.append(a).append("|");

}

}

return sb.substring(0, sb.length() - 1) + ").*";

}

return null;

}

}

2.这里是合法的url中域名,把它加到attrs.xml文件中

91md.cc

91doctors.cn

qiniu.com

cnzz.com

iok.la

cnzz.mmstat.com

clouddn.com

3.实现WebViewClient类

package com.ylz.cloudhos.doc.ui.widget;

import android.webkit.WebResourceResponse;

import android.webkit.WebView;

import android.webkit.WebViewClient;

import com.ylz.cloudhos.doc.utils.ADFilterTool;

/**

* 屏蔽广告,通过重载WebViewClient

*

* Created by MyPC on 2017/4/18.

*/

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) {

// if (!url.contains(homeurl)) {

// if (ADFilterTool.hasNotAd(url)) {

// return super.shouldInterceptRequest(view, url);

// } else {

// return new WebResourceResponse(null, null, null);

// }

// } else {

// return super.shouldInterceptRequest(view, url);

// }

// }

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

if (ADFilterTool.hasNotAd(url)) {

return super.shouldInterceptRequest(view, url);

} else {

return new WebResourceResponse(null, null, null);

}

}

}5.替换掉原先WebViewClient类的实现

// mWebView.setWebViewClient(new WebViewClient() {

// @Override

// public void onPageStarted(WebView view, String url, Bitmap favicon) {

// super.onPageStarted(view, url, favicon);

// LoadDialog.show(mContext);

// }

//

// @Override

// public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

// LoadDialog.dismiss(mContext);

// }

//

// @Override

// public boolean shouldOverrideUrlLoading(WebView view, String url) {

// // 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器

// view.loadUrl(url);

// return true;

// }

// });

mWebView.setWebViewClient(new NoAdWebViewClient() {

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

super.onPageStarted(view, url, favicon);

LoadDialog.show(mContext);

}

@Override

public void onPageFinished(WebView view, String url) {

// super.onPageFinished(view, url);

LoadDialog.dismiss(mContext);

}

@Override

public boolean shouldOverrideUrlLoading(WebView view, String url) {

// 返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器

view.loadUrl(url);

return true;

}

});然后就完事了。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值