android自带的webview有广告,android webview 拦截广告

要想对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)。

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

//网络请求部分

@Override

public WebResourceResponse shouldInterceptRequest(WebView view, String url) {

LogUtils.paintE(true,"地址:"+url,this);

url = url.toLowerCase();

Map allowMap = webView.getAllowMap();

if (allowMap.size() == 0){

return super.shouldInterceptRequest(view, url);

}else {

if(HttpUtil.allowUrl(url,allowMap)){

return super.shouldInterceptRequest(view, url);

}else{

//去掉广告

return new WebResourceResponse(null,null,null);

}

}

}

重写一个webview,在webview中添加一个map,保存允许通过的url,在allowUrl()方法中判断当前请求的url是否在map集合中,如果存在则允许访问,如果map集合中没有指定url,也允许访问。

注意:不是shouldInterceptRequest函数返回null就能屏蔽掉请求!需要这样返回return new WebResourceResponse(null,null,null);

在网络大环境下,http劫持广告很难从源头杜绝。随着越来越多的app嵌入h5,会有越来越多的人在手机端遇到这种劫持广告,作为开发者,一定不要觉得说,这是用户使用免费wifi的原因或者这是运营商的植入广告。我们有的时候改变不了大环境,那么我们做出更多的努力,在app端让劫持广告更难成功。

a0dc5aeae1798ce427cd8be437143b00.png

举报/反馈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值