WebView的使用以及交互

WebView常用方法说明



	WebSettings webSettings = webView.getSettings();
    //如果访问的页面中要与Javascript交互,则webview必须设置支持Javascript
    webSettings.setJavaScriptEnabled(true);

    //设置自适应屏幕,两者合用
    webSettings.setUseWideViewPort(true); //将图片调整到适合webview的大小
    webSettings.setLoadWithOverviewMode(true); // 缩放至屏幕的大小

    webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); //支持内容重新布局

    //缩放操作
    webSettings.setSupportZoom(true); //支持缩放,默认为true。是下面那个的前提。
    webSettings.setBuiltInZoomControls(true); //设置内置的缩放控件。若为false,则该WebView不可缩放
    webSettings.setDisplayZoomControls(false); //隐藏原生的缩放控件
    webSettings.setTextZoom(2);//设置文本的缩放倍数,默认为 100

    webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH);  //提高渲染的优先级

    webSettings.setStandardFontFamily("");//设置 WebView 的字体,默认字体为 "sans-serif"
    webSettings.setDefaultFontSize(20);//设置 WebView 字体的大小,默认大小为 16
    webSettings.setMinimumFontSize(12);//设置 WebView 支持的最小字体大小,默认为 8

    //其他操作
    webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK); //关闭webview中缓存
    webSettings.setAllowFileAccess(true); //设置可以访问文件
    webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
    webSettings.setLoadsImagesAutomatically(true); //支持自动加载图片
    webSettings.setDefaultTextEncodingName("utf-8");//设置编码格式
    webSettings.setGeolocationEnabled(true);//允许网页执行定位操作

    // 5.1以上默认禁止了https和http混用,以下方式是开启
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
        webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
    }

    //不允许访问本地文件(不影响assets和resources资源的加载)
    webSettings.setAllowFileAccess(false);
    webSettings.setAllowFileAccessFromFileURLs(false);
    webSettings.setAllowUniversalAccessFromFileURLs(false);
	//WebView是否可以后退
	boolean canGoBack = webView.canGoBack();
	//WebView后退
	webView.goBack();
	//WebView是否可以前进
	boolean canGoForward = webView.canGoForward();
	//WebView前进
	webView.goForward();
	//以当前的index为起始点前进或者后退到历史记录中指定的steps
	//如果steps为负数则为后退,正数则为前进
	boolean canGoBackOrForward = webView.canGoBackOrForward(step);
    //刷新页面(当前页面的所有资源都会重新加载)
    webView.reload();
    webView.stopLoading(); //停止加载
    //清除网页访问留下的缓存
    //由于内核缓存是全局的因此这个方法不仅仅针对webview而是针对整个应用程序.
    Webview.clearCache(true);

    //清除当前webview访问的历史记录
    //只会webview访问历史记录里的所有记录除了当前访问记录
    Webview.clearHistory();

    //这个api仅仅清除自动完成填充的表单数据,并不会清除WebView存储到本地的数据
    Webview.clearFormData();

  

    //获取当前可见区域的顶端距整个页面顶端的距离,也就是当前内容滚动的距离。
    webView.getScrollY();
    //获取WebView控件的高度。
    webView.getHeight();webView.getBottom();
    //获取HTML的高度(原始高度,不包括缩放后的高度)
    webView.getContentHeight();


/**
  * 当下载文件时打开系统自带的浏览器进行下载,当然也可以对捕获到的 url 进行处理在应用内下载。
  **/
  webView.setDownloadListener(new DownloadListener() {
      @Override
      public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
           Uri uri = Uri.parse(url);
           Intent intent = new Intent(Intent.ACTION_VIEW, uri);
           startActivity(intent);
      } 
  });
  

WebView的几种加载方式



 //方式一:加载网页
    webView.loadUrl("");
    //方式二:加载资源文件
    webView.loadUrl("file:///android_asset/test.html");
    //方式三:加载一段代码
    webView.loadData(String data,String mimeType, String encoding);
    
    

简单说一下方式三
WebView.loadData()和WebView.loadDataWithBaseURL()是表示加载某一段代码,其中,WebView.loadDataWithBaseURL()兼容性更好,适用场景更多

用法如下:


 //WebView.loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl))的五个参数:
 //baseUrl表示基础的网页,data表示要加载的内容,mimeType表示加载网页的类型,encoding表示编码格式,historyUrl表示可用历史记录,可以为null。
webView.loadDataWithBaseURL(null, "html片段", "text/html", "utf-8",null);

WebView的生命周期


@Override
protected void onResume() {
    super.onResume();
    //恢复webview的状态(不靠谱)
    webView.resumeTimers();
    //激活webView的状态,能正常加载网页
    webView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    //当页面被失去焦点被切换到后台不可见状态,需要执行onPause
    //通过onPause动作通知内核暂停所有的动作,比如DOM的解析、plugin的执行、JavaScript执行。
    webView.onPause();

    //当应用程序(存在webview)被切换到后台时,这个方法不仅仅针对当前的webview而是全局的全应用程序的webview
    //它会暂停所有webview的layout,parsing,javascripttimer。降低CPU功耗。(不靠谱)
    webView.pauseTimers();
}

//在关闭了Activity时,如果Webview的音乐或视频,还在播放。就必须销毁Webview
//但是注意:webview调用destory时,webview仍绑定在Activity上
//这是由于自定义webview构建时传入了该Activity的context对象
//因此需要先从父容器中移除webview,然后再销毁webview:
ViewGroup parent = findViewById(R.id.container);
parent.removeView(webView);
webView.destroy();

WebView监听


		//进度监听
        webview.setWebChromeClient(new WebChromeClient(){
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                super.onProgressChanged(view, newProgress);
            }
        });
        webview.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                //加载完成
           
            }
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                return super.shouldOverrideUrlLoading(view, request);
                //url拦截
            }
            @Override

            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed(); //表示等待证书响应
                // handler.cancel(); //表示挂起连接,为默认方式
                // handler.handleMessage(null); //可做其他处理
            }

        });
        

WebView交互


		//AndroidtoJS类对象映射到js的object对象
        webview.addJavascriptInterface(new AndroidtoJs(), "object");

	//交互方法
  public class AndroidtoJs extends Object {
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void Interactive(String str) {
            LogUtils.showLog("前端方法", str);
            if ("".equals(str)) { 
                //互调
            } 
        }
    }

猜你喜欢

转载自blog.csdn.net/TLuffy/article/details/100546107