相信现在WebView使用的相当频繁,遇到的问题也很多,今天我就来解析一下WebView的WebViewClient和WebChromeClient,表面文字看着以为是内核不一样。其实不是,WebViewClient用于帮助WebView处理各种通知和请求事件;而WebChromeClient更丰富一些,帮助WebView处理Javascript各类对话框、弹窗等等。
WebViewClient
以下都是WebViewClient比较基础的方法
//处理webView的按键事件
boolean shouldOverrideKeyEvent(WebView view, KeyEvent event)
//截取url请求,在当前视图加载,避免在跳转到自带浏览器
boolean shouldOverrideUrlLoading(WebView view, String url)
//WebView改变时调用
void onScaleChanged(WebView view, float oldScale, float newScale)
//对https的请求处理
void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error)
//获取返回信息授权
void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm)
//处理报错信息(API23以后用第二个)
void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error)
//页面开始载入时调用
void onPageStarted(WebView view, String url, Bitmap favicon)
//页面载入结束时调用
void onPageFinished(WebView view, String url)
//加载资源时调用
void onLoadResource(WebView view, String url)
WebChromeClient
以下是WebChromeClient比较基础的方法
//webview关闭时调用
void onCloseWindow(WebView window)
//Js的弹窗
boolean onJsAlert(WebView view, String url, String message, JsResult result)
//Js提示框
boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result)
//Js确认框
boolean onJsConfirm(WebView view, String url, String message, JsResult result)
//加载进度
void onProgressChanged(WebView view, int newProgress)
//全屏模式(API18以后用第二种)
onShowCustomView(View view, WebChromeClient.CustomViewCallback callback)
onShowCustomView(View view, int requestedOrientation, WebChromeClient.CustomViewCallback callback)
file标签 打开文件
以上都是比较简单的一下开放重写的方法,也会有一些未开放的重写方法,比如如下:
// For Android 3.0+
public void openFileChooser(ValueCallback<Uri> uploadMsg) {...}
// For Android 3.0+
public void openFileChooser(ValueCallback uploadMsg, String acceptType) {...}
// For Android 4.1
public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {...}
// For Android 5.0+
public boolean onShowFileChooser (WebView webView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams) {
return true;
}
好了,今天就先到这里,以上都是我使用中的一些积累,跟大家相互分享了。
网友评论