loadUrl
//加载assets目录下的test.html文件 webView.loadUrl("file:///android_asset/test.html");
//加载网络资源(注意要加上网络权限)
webView.loadUrl("http://blog.csdn.net");
setWebViewClient
1)默认 跳转手机浏览器加载h5页面
2)设置WebViewClient在本WebView中显示。注意:并不需要覆盖 shouldOverrideUrlLoading 方法,设置了WebViewClient,则就不会调用系统浏览
3)实现对网页中超链接的拦截
webView.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if("http://www.jikedaohang.com/".equals(url)) { view.loadUrl("https://www.baidu.com/"); } return true; } });
shouldOverrideUrlLoading返回值
true:则在打开新的url时WebView就不会再加载url
false:则系统就认为上层没有做处理,接下来还是会继续加载url
4)加载网页时替换某个资源
在shouldInterceptRequest中进行图片替换
shouldInterceptRequest有两个重载:
①public WebResourceResponse shouldInterceptRequest (WebView view, String url) 【已过时】
②public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
①public WebResourceResponse shouldInterceptRequest (WebView view, String url) 【已过时】
②public WebResourceResponse shouldInterceptRequest (WebView view, WebResourceRequest request)
两种方法主要是第二个参数的不同,WebResourceRequest 将能够获取更多的信息,提供了getUrl(),getMethod,getRequestHeaders等方法第一种回调:
mWebView.setWebViewClient(new WebViewClient(){
@Overridepublic WebResourceResponse shouldInterceptRequest(WebView view, String url) {WebResourceResponse response = null ;if (url.contains( "logo" )) {try {InputStream logo = getAssets().open( "logo.png" );response = new WebResourceResponse( "image/png" , "UTF-8" , logo);} catch (IOException e) {e.printStackTrace();} }return response;
}
});
5)设置开始加载网页、加载完成、加载错误时处理
webView.setWebViewClient(new WebViewClient() {
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); // 开始加载网页时处理 如:显示"加载提示" 的加载对话框 ... } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); // 网页加载完成时处理 如:让 加载对话框 消失 ... } @Override public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); // 加载网页失败时处理 如:提示失败,或显示新的界面 ... } });
5)处理https请求,为WebView处理ssl证书设置WebView默认是不处理https请求的,需要在WebViewClient子类中重写父类的onReceivedSslError函数
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // 接受信任所有网站的证书
// handler.cancel(); // 默认操作 不处理
// handler.handleMessage(null); // 可做其他处理
}
});
setWebChromeClient
用来处理Javascript的对话框、网站图标、网站标题以及网页加载进度等
1)显示页面加载进度在WebChromeClient子类中重写父类的onProgressChanged
函数,progress表示当前页面加载的进度,为1至100的整数
webView.setWebChromeClient(new WebChromeClient() { public void onProgressChanged(WebView view, int progress) { setTitle("页面加载中,请稍候..." + progress + "%"); setProgress(progress * 100); if (progress == 100) { //... } } });
2)
加快HTML网页加载完成速度(默认情况html代码下载到WebView后,webkit开始解析网页各个节点,发现有外部样式文件或者外部脚本文件时,会异步发起网络
请求下载文件,但如果在这之前也有解析到image节点,那势必也会发起网络请求下
载相应的图片。在网络情况较差的情况下,过多的网络请求就会造成带宽紧张,影响
到css或js文件加载完成的时间,造成页面空白loading过久。解决的方法就是告诉
WebView先不要自动加载图片,等页面finish后再发起图片加载。)