Android中的setWebViewClientsetWebChromeClient有什么区别?

最佳答案

source code:

// 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之间有太多差异。但是,基本上:如果您要开发不需要太多功能但呈现HTML的WebView,则可以使用WebViewClient。另一方面,如果要(例如)加载要呈现的页面的图标,则应使用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 native 浏览器)。

07-27 14:05