安卓系统中的setWebViewClient和setWebChromeClient有什么不同?
发布于 2010-05-15 00:12:54
// Instance of WebViewClient that is the client callback.
private volatile WebViewClient mWebViewClient;
// Instance of WebChromeClient for handling all chrome functions.
private volatile WebChromeClient mWebChromeClient;
// SOME OTHER SUTFFF.......
/**
* Set the WebViewClient.
* @param client An implementation of WebViewClient.
*/
public void setWebViewClient(WebViewClient client) {
mWebViewClient = client;
}
/**
* Set the WebChromeClient.
* @param client An implementation of WebChromeClient.
*/
public void setWebChromeClient(WebChromeClient client) {
mWebChromeClient = client;
}使用WebChromeClient允许您处理Javascript对话框、图标、标题和进度。看一下这个例子:Adding alert() support to a WebView
乍一看,WebViewClient和WebChromeClient有太多不同之处。但是,基本上:如果您正在开发一个不需要太多功能但可以呈现WebView的HTML,则只需使用WebViewClient即可。另一方面,如果您想(例如)加载正在呈现的页面的favicon,则应使用WebChromeClient对象并覆盖onReceivedIcon(WebView view, Bitmap icon)。
大多数时候,如果你不想担心这些事情...你可以这样做:
webView= (WebView) findViewById(R.id.webview);
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.getSettings().setJavaScriptEnabled(true);
webView.loadUrl(url); 你的WebView (理论上)将实现所有功能(作为android原生浏览器)。
发布于 2020-08-26 17:15:19
如果要从网页记录错误,则应使用WebChromeClient并覆盖其onConsoleMessage
webView.settings.apply {
javaScriptEnabled = true
javaScriptCanOpenWindowsAutomatically = true
domStorageEnabled = true
}
webView.webViewClient = WebViewClient()
webView.webChromeClient = MyWebChromeClient()
private class MyWebChromeClient : WebChromeClient() {
override fun onConsoleMessage(consoleMessage: ConsoleMessage): Boolean {
Timber.d("${consoleMessage.message()}")
Timber.d("${consoleMessage.lineNumber()} ${consoleMessage.sourceId()}")
return super.onConsoleMessage(consoleMessage)
}
}https://stackoverflow.com/questions/2835556
复制相似问题