遇到的问题:
1. webview load url 之后,看到有个中国移动的广告浮窗,乍一看挺可爱的,为什么会出来呢?
2. 点击进去看到这个html页面,点击设置
3. 令人气愤的是,这三个选项都不是我想要的啊
4. 令人无奈的只要通过流量浏览网页,就会出现这个弹窗,这个没人管吗?很不雅观啊
解决方式
1. 方法一:onLoadResource()//这个方式无效,具体的目前我也不清楚
@Override
public void onLoadResource(WebView view, String url) {
LogUtils.d(CommentWorkProblemFragment.class, "onLoadResource url " + url);
if (url.startsWith("http://www.baidu.cn")) {
//百度(目标地址)
super.onLoadResource(view, url);
} else if (url.contains("heb.wsc.wo.cn")) {
view.loadUrl(null);
//联通
} else {
//其他
view.loadUrl(null);
}
}
- 方法二:shouldInterceptRequest()
@Override
public WebResourceResponse shouldInterceptRequest(WebView view, String url) {
//屏蔽广告
if (url.startsWith("http://www.baidu.com")) {
//百度
return super.shouldInterceptRequest(view, url);
} else if (url.contains("heb.wsc.wo.cn")) {
return new WebResourceResponse(null, null, null);
//联通
}else if(url.contains("http://218.205.68.160:8080")) {
//移动
return new WebResourceResponse(null, null, null);
}
else {
//其他
return new WebResourceResponse(null, null, null);
}
}
- 方法三:shouldOverrideUrlLoading()//1.可以不加载指定的url2. 甚至指定的url,跳转到其他的Activity
webView.setWebViewClient(new WebViewClient() {
@Override
// 在点击请求的是链接是才会调用,重写此方法返回true表明点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边。这个函数我们可以做很多操作,比如我们读取到某些特殊的URL,于是就可以不打开地址,取消这个操作,进行预先定义的其他操作,这对一个程序是非常必要的。
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// 判断url链接中是否含有某个字段,如果有就执行指定的跳转(不执行跳转url链接),如果没有就加载url链接
if (url.contains("/mproduct-")) {
Intent i = new Intent(MainActivity.this, MainActivity.class);
startActivity(i);
return true;
} else {
return false;
}
}
});
- 方法四:webview拦截可获得标签的广告(通过js删除元素,未测试,转载方法)
mWebView.setWebViewClient(new WebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:document.getElementById('statusholder').remove();");
view.loadUrl("javascript:document.getElementById('progresstextholder').remove();");
view.loadUrl("javascript:document.getElementById('ftsiappholder').remove();");
view.loadUrl("javascript:document.getElementById('tlbstoolbar').remove();");
super.onPageFinished(view, url);
}
});
参考
1. webview的url链接请求拦截
2. webview的广告拦截
3. webview拦截可获得标签的广告