androidwebviewclientwebchromeclient

What's the difference between setWebViewClient vs. setWebChromeClient?


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


Solution

  • 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 progress. Take a look of this example: Adding alert() support to a WebView

    At first glance, there are too many differences between 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 time, 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).