WebViewClient和WebChromeClient的区别

WebViewClient

WebViewClient主要帮助WebView处理各种通知、请求事件等,比较常用的方法有

public boolean shouldOverrideUrlLoading(WebView view, String url) 

这个方法有以下三种情况:

  1. 若没有设置 WebViewClient 则在点击链接之后由系统处理该 url,通常是使用浏览器打开或弹出浏览器选择对话框。
  2. 若设置 WebViewClient 且该方法返回 true ,则说明由应用的代码处理该 url,WebView 不处理。薄荷现在很多自定义协议就属于这种情况
  3. 若设置 WebViewClient 且该方法返回 false,则说明由 WebView 处理该 url,即用 WebView 加载该 url。

public void onPageStarted(WebView view, String url, Bitmap favicon)  

public void onPageFinished(WebView view, String url) 

页面开始与结束的监听方法


public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) 

通常我们通过webview来访问web页面都是在网络的情况下,一旦没有网络就会显示”无法找到该网页”的信息,这样会暴露我们的连接,如下图

webview-error

所以我们需要一个有好的提示,并且不会暴露链接的方法。这时候WebViewClient的onReceivedError方法就派上了用场了,我们需要在本地自定义一个错误页面,然后加载即可

WebChromeClient

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等,常用的方法有

@Override
public void onProgressChanged(WebView view, int newProgress) {
    super.onProgressChanged(view, newProgress);
    getActivity().setProgress(newProgress);
}

监视加载进度,如果我们想在布局顶部显示一个进度条,我们可以直接在上面方法中调用 getActivity().setProgress(newProgress);,而不需要在顶部加个progressBar了


public boolean onJsAlert(WebView view, String url, String message, JsResult result) 

监测javascript的alert()弹出,类似的还有onJsPrompt,onJsConfirm