Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What's the difference between setWebViewClient vs. setWebChromeClient?

What's the difference between setWebViewClient vs. setWebChromeClient in Android?

like image 206
Pentium10 Avatar asked May 14 '10 15:05

Pentium10


1 Answers

From the 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; } 

Using WebChromeClient allows you to handle Javascript dialogs, favicons, titles, and the progress. Take a look of this example: Adding alert() support to a WebView

At first glance, there are too many differences WebViewClient & WebChromeClient. But, basically: if you are developing a WebView that won't require too many features but rendering HTML, you can just use a WebViewClient. On the other hand, if you want to (for instance) load the favicon of the page you are rendering, you should use a WebChromeClient object and override the onReceivedIcon(WebView view, Bitmap icon).

Most of the times, if you don't want to worry about those things... you can just do this:

webView= (WebView) findViewById(R.id.webview);  webView.setWebChromeClient(new WebChromeClient());  webView.setWebViewClient(new WebViewClient());  webView.getSettings().setJavaScriptEnabled(true);  webView.loadUrl(url);  

And your WebView will (in theory) have all features implemented (as the android native browser).

like image 79
Cristian Avatar answered Oct 09 '22 10:10

Cristian