Android中webview的相关知识点

webview是Android中用来加载网页的一个组件。有一定开发基础的Android程序员应该都是很熟悉这个组件的。有时候我们可能直接使用webview,有时候我们喜欢使用类似AgentWeb之类的三方框架。这里我总结一下webview的一些相关常用方法。今后不论怎么使用webview,这些常用方法都是必不可少的。

1.webview的常用方法

  • loadUrl:加载指定的URL,URL可以是HTTP打头的 外部网址,也可以是file打头的资产网页。
  • getSettings:获取浏览器的网页设置信息。返回一个网页设置WebSettings对象。
  • addJavascriptInterface:添加供JavaScript调用的App接口。
  • setWebViewClient:设置网页视图的网页浏览客户端WebViewClient,如果已调用loadUrl方法,就必须同时调用本方法。
  • setWebChromeClient:设置浏览器的网页交互客户端WebChromeClient。
  • setDownloadListener:设置文件下载监听器DownloadListener。
  • loadData:加载文本数据。第二个参数表示媒体类型,如text/html;第三个参数表示数据的编码格式,如base64表示采用BASE64编码,其余值(包括null)表示URL编码。
  • canGoBack:判断页面能否返回。
  • goBack:返回上一个页面。
  • canGoForward:判断页面能否前进。
  • goForward:前进到下一个页面。
  • reload:重新加载页面。
  • stopLoading:停止加载页面。

2.webSettings的常用方法

<1>基本的加载设置

  • setLoadsImagesAutomatically:设置是否自动加载图片。如果设置为false,就表示无图模式。
  • setDefaultTextEncodingName:设置默认的文本编码,如UTF-8、GBK等。
  • setJavaScriptEnabled:设置是否支持JavaScript。
  • setJavaScriptCanOpenWindowsAutomatically:设置是否允许JavaScript自动打开新窗口,即JS的window.open方法是否适用。

<2>与网页适配有关的设置

  • setSupportZoom:设置是否支持页面缩放。
  • setBuiltInZoomControls:设置是否出现缩放工具。
  • setUseWideViewPort:当容器超过页面大小时,是否将页面放大到塞满容器宽度的尺寸。
  • setLoadWithOverviewMode:当页面超过容器大小时,是否将页面缩小到容器能够装下的尺寸。
  • setLayoutAlgorithm:设置自适应屏幕的算法,一般是LayoutAlgorithm.SINGLE_COLUMN。如果不设置,Android4.2.2及之前的版本就可能出现表格错乱的情况。

<3>与存储有关的设置

  • setAppCacheEnabled:设置是否启用App缓存。
  • setAppCachePath:设置App缓存文件的路径。
  • setAllowFileAccess:设置是否允许访问文件,如WebView访问SD卡的文件。
  • setDatabaseEnabled:设置是否启用数据库。
  • setDomStorageEnabled:设置是否启用本地存储。
  • setCacheMode:设置使用的缓存模式。缓存模式的取值见下表
WebSettings类的缓存模式 说明
LOAD_CACHE_ELSE_NETWORK 优先使用缓存
LOAD_NO_CACHE 不使用缓存
LOAD_CACHE_ONLY 只使用缓存

3.webViewClient的常用方法

  • onPageStarted:页面开始加载时触发。可在此弹出进度对话框ProgressDialog。
  • onPageFinished:页面加载结束时触发。可在此关闭进度对话框。
  • onReceivedError:收到错误信息时触发。
  • onReceivedSslError:收到SSL错误时触发。
  • shouldOverrideUrlLoading:发生网页跳转时触发。重写该方法的目的是判断每当点击网页中的链接时,是想在当前的网页视图里跳转还是跳转到系统自带的浏览器。
public boolean shouldOverrideUrlLoading(WebView view, String url) {
    view.loadUrl(url);
    return true;
}

这里也可以选择让他跳转一个我们封装好的WebView页面,把地址传入,仿原生跳转。 

4.webChromeClient的常用方法

  • onReceivedTitle:收到页面标题时触发。
  • onProgressChanged:页面加载进度发生变化时触发。可在此刷新进度对话框的进度条。
  • onJsAlert:网页的JS代码调用alert方法时触发。可在此弹出自定义的提示对话框。
  • onJsConfirm:网页的JS代码调用confirm方法时触发。可在此弹出自定义的确认对话框。
  • onJsPrompt:网页的JS代码调用prompt方法时触发。可在此弹出自定义的提示对话框。
  • onGeolocationPermissionsShowPrompt:网页请求定位权限时触发。可在此弹出一个确认对话框,提示用户是否允许网页获得定位权限。如果不想出现弹框就允许网页获得权限。
webView.setWebChromeClient(new WebChromeClient(){
    @Override
    public void onGeolocationPermissionsShowPrompt(String origin,GeolocationPermissions.Callback callback) {
        //不弹框允许网页获得定位权限
        callback.invoke(origin,true,false);
        super.onGeolocationPermissionsShowPrompt(origin, callback);
    }
});

5.DownloadListener的常用方法

  • onDownloadStart:文件开始下载触发。可在此接管下载动作,比如设置文件下载的方式,文件的保存路径等。
上一篇:uniapp webView获取不到cookie


下一篇:向 webview 添加 userScript