首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >setWebViewClient和setWebChromeClient有什么不同?

setWebViewClient和setWebChromeClient有什么不同?
EN

Stack Overflow用户
提问于 2010-05-14 23:53:51
回答 2查看 151.1K关注 0票数 271

安卓系统中的setWebViewClientsetWebChromeClient有什么不同?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-05-15 00:12:54

source code

代码语言:javascript
复制
// 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

乍一看,WebViewClientWebChromeClient有太多不同之处。但是,基本上:如果您正在开发一个不需要太多功能但可以呈现WebView的HTML,则只需使用WebViewClient即可。另一方面,如果您想(例如)加载正在呈现的页面的favicon,则应使用WebChromeClient对象并覆盖onReceivedIcon(WebView view, Bitmap icon)

大多数时候,如果你不想担心这些事情...你可以这样做:

代码语言:javascript
复制
webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 

你的WebView (理论上)将实现所有功能(作为android原生浏览器)。

票数 162
EN

Stack Overflow用户

发布于 2020-08-26 17:15:19

如果要从网页记录错误,则应使用WebChromeClient并覆盖其onConsoleMessage

代码语言:javascript
复制
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)
    }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2835556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档