一:原理
WebView
有个setWebViewClient()
方法,new一个WebViewClient()
的匿名类,里面有两个待重写的方法。其中一个为每次访问前都会回调的方法,在这里面如果待访问的url里面和我们定义的广告url相同,就不访问该url,其余正常。
二:实现
webView.setWebViewClient(new WebViewClient() {
private Map<String, Boolean> loadedUrls = new HashMap<>();
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Called by WebView.
view.loadUrl(url);
return true;
}
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
url = url.toLowerCase();
if(url.contains("google.com") || url.contains("googleads.g")){
return new WebResourceResponse(null,null,null);
}else{
return super.shouldInterceptRequest(view, url);
}
}
});
三:效果图
未开启拦截策略前:
开启拦截策略后:
说明:这种拦截方式优点是上手快,逻辑简单,加载流量少,但前提是必须知晓有哪些广告公司的url。还有一种是过滤JavaScript,这种方式比较繁杂,这里仅提一下。