前提: 最近在项目中碰到 WebViewClient 的 shouldOverrideUrlLoading 方法,在部分机型中失效情况。(项目中使用的是 WebView封装框架–AgentWeb)
问题:调用 WebViewClient 的 shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 方法时,在 安卓5.1(魅族),安卓7.0(魅族/荣耀),安卓8.1(荣耀) 上都可以成功拦截,但在 安卓6.0(华为) 上却无法拦截,直接不会调用该方法。
解决: shouldOverrideUrlLoading(WebView view, WebResourceRequest request) 该方法为新提供的方法,还有一个过时的方法shouldOverrideUrlLoading(WebView view, String url) ,同时调用这两个方法时,可以实现上述机型与华为6.0系统的兼容。
拓展:
WebViewClient 方法列举
/**
* 在开始加载网页时会回调
*/
public void onPageStarted(WebView view, String url, Bitmap favicon)
/**
* 在结束加载网页时会回调
*/
public void onPageFinished(WebView view, String url)
/**
* 拦截 url 跳转,在里边添加点击链接跳转或者操作
*/
public boolean shouldOverrideUrlLoading(WebView view,WebResourceRequest request)
/**
* 加载错误的时候会回调,在其中可做错误处理,比如再请求加载一次,或者提示404的错误页面
*/
public void onReceivedError(WebView view, int errorCode,String description, String failingUrl)
/**
* 当接收到https错误时,会回调此函数,在其中可以做错误处理
*/
public void onReceivedSslError(WebView view, SslErrorHandler handler,SslError error)
/**
* 在每一次请求资源时,都会通过这个函数来回调
*/
public WebResourceResponse shouldInterceptRequest(WebView view,
String url) {
return null;
}