Android WebView显示广告
2017-04-19 17:55
337 查看
参考文档:
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.过滤广告的工具类
2.这里是合法的url中域名,把它加到attrs.xml文件中
3.实现WebViewClient类
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.过滤广告的工具类
/** * 过滤广告 * <p> * Created by MyPC on 2017/4/18. */ public class ADFilterTool { /** * 正则表达式 */ private static String PATTERN = ""; static { initPattern(); } /** * 初始化pattern */ private static void initPattern() { PATTERN = getPatternStr(); } /** * 判断url的域名是否合法 * <p> * 域名是否合法:自己项目中使用的域名,为合法域名;其它域名皆为不合法域名,进行屏蔽 * * @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文件中
<!--项目中用到的合法域名--> <string-array name="legal_domain"> <item>91md.cc</item> <item>91doctors.cn</item> <item>qiniu.com</item> <item>cnzz.com</item> <item>iok.la</item> <item>cnzz.mmstat.com</item> <item>clouddn.com</item> </string-array>
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 * <p> * 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; } });然后就完事了。。。。
相关文章推荐
- Android WebView 显示不正常
- android webview 显示空白页问题解决
- android使用WebView显示sdcard的html文件
- Android 4.4 webview 显示问题
- android webView显示html图片比例缩放的效果
- android webview拖动后 顶部title布局显示空白
- Android WebView 加载网页只显示空白页
- Android——使用WebView显示网页
- Android:控件WebView显示网页
- 解决webView显示时候加广告问题
- Android的WebView控件载入网页显示速度慢的究极解决方案
- Android:控件WebView显示网页
- Android WebView 访问https显示空白页
- android webview中的html代码 @media screen 在低版本系统下显示不正常的解决办法
- android中WebView加载网页居中显示
- android 2.3 webView select控件 无法及时显示optionLabel的BUG
- Android中使用WebView显示网页
- android webview 缓存以及无网状态显示处理
- Android WebView中显示一张或多张图片