WebView WebViewClient 拦截URL在华为6.0与其他版本上的兼容区别

前提: 最近在项目中碰到 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;  
}

你可能感兴趣的:(android问题总结)