android webView全面解析基础设置,https,进度条

版权声明: https://blog.csdn.net/xu_coding/article/details/81005430

webView基础设置讲解

webView通过webSetting有很多的设置,一不注意可能就有个没有设置,然后渲染某个网页的时候失败了,下面是webView的重要设置。可以根据实际情况做调整。

WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);   //支持javaScript

        webSettings.setPluginState(WebSettings.PluginState.ON);  //启用插件

        webSettings.setUseWideViewPort(true);    //将图片调整成webview大小
        webSettings.setLoadWithOverviewMode(true);  //缩放成屏幕大小

        //设置缩放
        webSettings.setSupportZoom(true);         //支持缩放
        webSettings.setBuiltInZoomControls(true);  // 构建缩放控件,若为false,则无法缩放
        webSettings.setDisplayZoomControls(true);  //  是否显示默认的缩放控件

        //H5本地存储使用
        webSettings.setDomStorageEnabled(true);     //设置DOM存储api是否启用,一般不需要打开,但是像百度之类的网站,会记录搜索记录。不设置打开不了
        webSettings.setDatabaseEnabled(true);   //开启 database storage API 功能
        webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {   //android LOLLIPOP以上的系统,默认不支持兼容模式
            //也就是当存在http站点有https元素或者https站点有http元素的时候,无法访问
            webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE );  //启用兼容性设置
        }
        webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
        webSettings.setAllowFileAccess(true); //设置可以访问文件
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
        webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
        webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式

https的使用,https一般来说需要默认开启兼容模式,避免因为网站中同时存在https和http的链接元素 导致访问失败。

webView.setWebViewClient(new WebViewClient(){
 public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();
                //当https使用CA认证的证书的时候,一般不会产生错误,也不会执行到这里来,但是使用自己的证书的时候 比如像12306这种的网站(因为他的证书是自己颁发给自己的),会进入这个函数。 handler.proceed() 其实就是不管https的校验继续请求
                //如果你想实现Https的校验,下回分解
            }
        });

进度条的控制

 我们可以弄个进度条,表示网页的加载过程   
 //setWebChromeClient  功能比 setWebViewClient强大很多
        //可以用来处理进度条,对话框,标题,图标等
        webView.setWebChromeClient(new WebChromeClient(){
            @Override   //  newProgress an integer between 0 and 100.
            public void onProgressChanged(WebView view, int newProgress) {
                progressBar.setProgress(newProgress);
                super.onProgressChanged(view, newProgress);
            }

            @Override   //标题重写
            public void onReceivedTitle(WebView view, String title) {
                if(null!=title&&!"".equals(title)){
                    tv_title.setText(title);
                }
            }
        });

当点击系统返回键的时候 以及webview的声明周期控制

  @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode==KeyEvent.KEYCODE_BACK){
            if(webView.canGoBack()){
                webView.goBack();
            }else{
                finish();
            }
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }




    @Override
    protected void onPause() {
        webView.onPause();
        webView.pauseTimers();
        super.onPause();

    }

    @Override
    protected void onResume() {
        webView.onResume();
        webView.resumeTimers();
        super.onResume();
    }

    @Override
    protected void onDestroy() {
        if(webView!=null){
            webView.clearCache(true);   //清楚网页访问留下缓存
            webView.clearHistory();    //清楚历史记录
            webView.clearFormData();   //清楚表单数据
            ((ViewGroup)(webView.getParent())).removeView(webView);
            webView.destroy();  //销毁webView
            webView =null;
        }
        super.onDestroy();
    }

猜你喜欢

转载自blog.csdn.net/xu_coding/article/details/81005430