SetWebViewClient和 SetWebChromeClient的区别

WebView与WebChromeClient详解
本文详细介绍了Android中WebView及WebChromeClient的使用方法。包括如何设置JavaScript对话框、网站图标、标题等特性,并提供了添加进度条的具体示例。

参考;http://blog.csdn.net/dufangyu1990/article/details/39693181

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 aWebViewClient. 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).

说的很清楚了setWebChromeClient比setWebViewClient功能强大一些,

  1. setWebClient帮助WebView处理各种通知、请求事件

    onLoadResource
    onPageStart
    onPageFinish
    onReceiveError
    onReceivedHttpAuthRequest

如果你不需要太多的功能而仅仅是渲染一个HTML网页,只需要用setWebViewClient就可以了,但是如果要处理比较复杂的事务,就考虑用后者

2.setWebChromeClient辅助WebView处理JavaScript的对话框,网站图标,网站title,加载进度等

onCloseWindow(关闭WebView)
onCreateWindow()
onJsAlert (WebView上alert是弹不出来东西的,需要定制你的WebChromeClient处理弹出)
onJsPrompt
onJsConfirm
onProgressChanged
onReceivedIcon
onReceivedTitle

例如添加进度条:

webview1.setWebChromeClient(new WebChromeClient() 
        {          
            public void onProgressChanged(WebView view, int progress)   
            {   
                setProgress(progress * 100);     
                if(progress == 100){     
                    imageView1.setVisibility(View.GONE); 
                    tv1.setVisibility(View.GONE);
                    pb1.setVisibility(View.GONE);
                    fy1.setVisibility(View.GONE);
                }
            }
        }
        );    

另外如果你怕顾虑太多,可以这样使用

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.loadUrl(url); 
在 Android 开发中,`WebViewClient` `WebChromeClient` 是两个用于处理 WebView 中不同事件的重要类,它们分别负责处理与页面内容浏览器特性相关的回调。 ### `WebViewClient` 的职责 `WebViewClient` 主要用于处理与页面加载导航相关的事件。例如,`shouldOverrideUrlLoading` 方法允许开发者决定是否在 WebView 中加载一个新页面还是交由系统浏览器处理。此外,`onPageStarted` `onPageFinished` 方法可以用来监听页面加载的开始结束事件,这对于显示或隐藏加载进度条非常有用。`onReceivedError` 方法则用于处理页面加载过程中出现的错误[^2]。 ### `WebChromeClient` 的职责 相比之下,`WebChromeClient` 更侧重于提供与浏览器功能相关的用户体验增强,如处理 JavaScript 对话框(`onJsAlert`, `onJsConfirm`, `onJsPrompt`)、更新进度条(`onProgressChanged`)、接收网页标题(`onReceivedTitle`)图标(`onReceivedIcon`)等[^1]。 ### 使用场景对比 如果你的应用只需要加载显示网页内容,那么使用 `WebViewClient` 就足够了。但是,如果需要支持 JavaScript 弹窗、自定义进度条或其他浏览器级别的交互,则需要使用 `WebChromeClient`。通常情况下,为了提供完整的网页浏览体验,开发者会同时设置 `WebViewClient` `WebChromeClient` 实例[^3]。 下面是一个简单的示例代码,展示了如何在 Android 应用中设置这两个客户端: ```java WebView webView = findViewById(R.id.webview); webView.setWebViewClient(new WebViewClient()); webView.setWebChromeClient(new WebChromeClient()); ``` 通过上述代码片段,可以初始化一个 WebView,并为其设置默认的 `WebViewClient` `WebChromeClient`,从而支持基本的页面加载更丰富的浏览器特性。 ###
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值