webview加载h5

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) 

两种方法主要是第二个参数的不同,WebResourceRequest 将能够获取更多的信息,提供了getUrl(),getMethod,getRequestHeaders等方法第一种回调:

  
  
  
mWebView.setWebViewClient(new WebViewClient(){
@Override
public 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后再发起图片加载。)
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值