shouldOverrideUrlLoading(下文简称拦截)执行在onPageStarted(下文简称加载)前面,如果拦截成功则不执行加载,有部分机型是不支持拦截的比如某米,有部分HTML代码是不支持拦截的,比如HTML里面有js写计时器。
首先示范正常的拦截(比如拦截http开头的网址):
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.toString();
if (url.indexOf("http") != -1) {
Toast.makeText(this, "成功拦截http开头的网址", Toast.LENGTH_SHORT).show();
}
return true;
}
};
但是如果拦截装逼失败,比如某米的手机拦截不了 那么只能想办法在加载中拦截了,因为加载在拦截后面之后执行,如果拦截失败,加载就启动,如果拦截成功,就没加载什么事了。
下面是加载的代码:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
String urls = url;
if (url.indexOf("http") != -1) {
Toast.makeText(this, "再次成功拦截http开头的网址,装逼成功", Toast.LENGTH_SHORT).show();
view.stopLoading();//这句的意思是让WebView 停止加载
}
super.onPageStarted(view, url, favicon);
}
};
注意:要想真正的拦截WebView 中的点击网址,那么上面的两种装逼方式都要加在new WebViewClient() {}里面。
不懂私聊
PS:但是这样又很麻烦,每次代码都要写两遍分别在shouldOverrideUrlLoading和onPageStarted里面,我博客里面有一篇更加简单有效的代码通用安卓和苹果,具体是在Html用js,有兴趣可以移步看看,里面有现成代码可以直接复制粘贴。