前言

  • WebView作为控件,除了继承了View的特性外,其本身功能也非常强大,还供给了网页加载、行进撤退、网页缩放、查找等功能
  • 本节整理了WebView控件供给的常用API运用,首要划分为以下几部分内容。
    图解WebView -- (2) WebView 常用API详解

一、 常用装备

   WebView常用装备API首要包括对 WebSettings WebViewClient WebChromeClient 装备操作。

1.1 获取WebSettings目标

WebSettings是专门 对WebView控件装备和办理的类。经过 getSettings() 办法获取该目标。

 public WebSettings getSettings()

1.2 装备和获取WebViewClient目标

  • WebViewClient是辅助WebView处理各种告诉,恳求等事件的一个类,按需求装备自定义的WebViewClient目标。
 public void setWebChromeClient(@Nullable WebChromeClient client)
 @NonNull
 public WebViewClient getWebViewClient() 

1.3 装备和获取WebChromeClient目标

  • WebChromeClient辅助WebView处理Javascript的对话框、网站图标、网站title、加载进展等的类,按需求装备自定义的WebChromeClient目标。
public void setWebChromeClient(@Nullable WebChromeClient client)
@Nullable
public WebChromeClient getWebChromeClient() 


二 、资源加载

  WebView资源加载首要供给了loadUrl()loadData()loadDataWithBaseURL()个办法。

2.1 loadUrl()

   该办法用于加载指定的url,是日常开发中,最常用的资源加载API

loadUrl(String url)
1.1.1 示例
  • 页面加载
webview.loadUrl("https://www.baidu.com");
  • 加载asset资源文件
webview.loadUrl("file://android_assets/demo.html");
  • 加载设备本地资源文件
webview.loadUrl("/storage/emulated/0/demo/demo.html");
1.1.2 其他补充

此外官方还供给了重载办法,新增 additionalHttpHeaders 参数,支撑在恳求URL一起,带上Http恳求头。

loadUrl(String url , Map<String,String> additionalHttpHeaders)

2.2 loadData()

loadData(String data,String mimeType,String encoding)

官方解说:

Loads the given data into this WebView using a ‘data’ scheme URL.

翻译过来便是: 加载Data URL scheme 格局的数据到WebView中。

图解WebView -- (2) WebView 常用API详解
该办法供给了三个参数:

  • data表明要加载的内容。
  • mimeType表明数据类型,如:text/html,image/jpeg
  • encoding表明字符编码格局,如:UTF-8

值得留意的点:

  • 该办法来首要用于装载 Data URL scheme 格局的数据(RFC2397协议),且不支撑加载网络数据。
  • 该办法不能加载图片,假如需求能够改用loadDataWithBaseURL()

2.3 loadDataWithBaseURL()

loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)

官方解说:

Loads the given data into this WebView, using baseUrl as the base URL for the content.

翻译过来:    将给定的数据加载到此WebView中,运用baseUrl作为内容的根本URL。

图解WebView -- (2) WebView 常用API详解

loadData()办法比较,该办法新增了两个参数:

  • baseUrl表明基础的网页,既用于解析相对URL,又用于使用JavaScript的同源战略。
  • historyUrl表明可用前史记录,能够为null值。

loadDataWithBaseURL()loadData()愈加强大,相似它的plus版,且支撑图片加载。

三、 页面操作

   WebView 中关于页面操作的API首要包括以下几块。

图解WebView -- (2) WebView 常用API详解

3.1 页面行进撤退操作

图解WebView -- (2) WebView 常用API详解

   首先,页面之所以能够行进撤退,是由于WebView中缓存了一个行进撤退恳求前史记录列表,对应的类为WebBackForwardList

   而为了便于存取,该列表中寄存的元素为恳求前史记录项的快照,对应的类为WebHistoryItem,其间包括前史页面url、原始url、网页标题、网页图标等信息。

   WebBackForwardList作为列表用于寄存WebHistoryItem目标, 也相应供给了获取当时页面快照、当时页面快照下标、指定下标快照和列表长度办法。

  经过前史列表的规划,页面行进撤退操作就转化成对应快照的切换,判别能否行进撤退则转化为是否有行进或者后台的前史记录。效果如下图:

图解WebView -- (2) WebView 常用API详解

3.1.1 判别页面能否行进
  • 回来值为布尔型,true表明存在可行进的前史界面。
public boolean canGoForward()
3.1.2 页面行进
 public void goForward()
3.1.3 判别页面能否撤退
  • 回来值为布尔型,true表明存在可撤退的前史界面。
public boolean canGoBack()
3.1.4 页面撤退
public void goBack()
3.1.5 判别页面能否行进或撤退
  • 参数steps表明行进或撤退的步进,正数则为行进,负数为撤退。
  • 回来值为布尔型,true表明存在可行进或撤退的前史界面。
public boolean canGoBackOrForward(int steps)
3.1.6 页面行进或撤退
  • 参数steps表明行进或撤退的步进,正数则为行进,负数为撤退。
 public void goBackOrForward(int steps)
3.1.7 获取页面行进撤退列表(即前史记录列表)
public WebBackForwardList copyBackForwardList()

3.2 页面缩放操作

  • 在操作页面缩放前,需求设置WebView控件支撑缩放
webView.getSettings().setSupportZoom(true);
3.2.1 页面放大
  • 回来值为布尔型,true表明界面放大成功。
public boolean zoomIn()
3.2.2 页面缩小
  • 回来值为布尔型,true表明界面缩小成功。
public boolean zoomOut()
3.2.3 页面按指定比例缩放
  • 参数zoomFactor表明界面需求缩放比例,范围为0.01 100.0
public void zoomBy(float zoomFactor)

3.3 页面加载操作

3.3.1 从头加载页面
  • 留意:当时页面的一切资源都会从头加载。
  public void reload()
3.3.2 停止加载页面
public void stopLoading()

3.4 文件下载操作

Registers the interface to be used when content can not be handled by the rendering engine, and should be downloaded instead. This will replace the current handler.

  • 当需求经过下载内容完成操作,而非烘托引擎烘托内容时,官方供给了一个DownloadListener接口供开发者装备完成。
public void setDownloadListener(@Nullable DownloadListener listener)
public interface DownloadListener {
    public void onDownloadStart(String url, String userAgent,
            String contentDisposition, String mimetype, long contentLength);
}

3.5 文本匹配查找操作

3.5.1 查找匹配文本并高亮显现

Finds all instances of find on the page and highlights them, asynchronously. Notifies any registered WebView.FindListener. Successive calls to this will cancel any pending searches.

 public void findAllAsync(@NonNull String find)
  • 异步查找页面上匹配数据并高亮显现。
  • 连续调用该办法,将撤销之前任何挂起的查找。
3.5.2 铲除查找匹配的高亮文本
public void clearMatches()
3.5.3 上下查找匹配文本

Highlights and scrolls to the next match found by findAllAsync, wrapping around page boundaries as necessary. Notifies any registered FindListener. If findAllAsync has not been called yet, or if clearMatches has been called since the last find operation, this function does nothing.

 public void findNext(boolean forward)
  • 该办法运用需求在调用findAllAsync之后。
  • 调用后将高亮显现并滚动到下一匹配项,并告诉任何已注册的FindListener
  • clearMatches之后调用,将不执行任何操作。
3.5.4 装备查找匹配监听器

Registers the listener to be notified as find-on-page operations progress. This will replace the current listener.

  • 监听接口供给了页面查找进展回调,将替换原有查找匹配监听器。
public void setFindListener(@Nullable FindListener listener)
 public interface FindListener {
        public void onFindResultReceived(int activeMatchOrdinal, int numberOfMatches,
            boolean isDoneCounting);
    }


四、 生命周期

图解WebView -- (2) WebView 常用API详解

4.1 onPause()

Does a best-effort attempt to pause any processing that can be paused safely, such as animations and geolocation. Note that this call does not pause JavaScript. To pause JavaScript globally, use pauseTimers. To resume WebView, call onResume.

public void onPause()
  • **页面被失掉焦点或者被切换到后台,处于不可见状况时,**则会执行onPause()
  • 该办法尽或许暂停任何能够安全暂停的处理,例如动画和地理定位。
  • 留意,这个调用不会暂停JavaScript。要全局暂停JavaScript,请运用pauseTimers()
  • 调用onResume(), 即可康复WebView,。

4.2 onResume()

  • onPause()状况中康复。
public void onResume()

4.3 pauseTimers()

Pauses all layout, parsing, and JavaScript timers for all WebViews. This is a global requests, not restricted to just this WebView. This can be useful if the application has been paused.

public void pauseTimers()
  • pauseTimers()会暂停一切WebView的布局显现、解析、延时,下降CPU功耗。
  • 当使用程序被切换到后台时,该办法不仅仅影响当时界面的WebView,而是全局使用的WebView

4.4 resumeTimers()

Resumes all layout, parsing, and JavaScript timers for all WebViews.This will resume dispatching all timers.

public void resumeTimers()
  • pauseTimers()状况中康复。
  • 调用该办法将康复一切Webview的布局、解析和JavaScript定时器。

4.5 destroy()

Destroys the internal state of this WebView. This method should be called after this WebView has been removed from the view system. No other methods may be called on this WebView after destroy.

public void destroy()
  • 无论是官网还是代码注释,对该办法的解说均为销毁WebView的内部状况
  • 若在封闭了Activity时,WebView的音乐或视频,还在播放,则必须销毁WebView的内部状况。
  • 调用destroy()办法前,需求先从父容器中移除WebView
rootLayout.removeView(webView);
webView.destroy();
  • 调用destroy()办法后,该WebView的其他办法均不能调用。

五、缓存整理

  WebView 关于缓存整理的API首要包括网页拜访、前史记录及表单数据缓存整理几块。

5.1 铲除网页拜访的缓存

  • 由于内核缓存是全局的,因此这个办法铲除的是整个使用程序页面拜访缓存
  • 参数includeDiskFiles表明是否包括磁盘文件的缓存,假如为false,则不包括,只铲除RAM缓存。
public void clearCache(boolean includeDiskFiles)

#### 5.2 铲除前史记录 – 只铲除当时`WebView`拜访的前史记录。 “` public void clearHistory() “`

5.3 表单数据铲除

  • 该办法仅铲除主动完成填充的表单数据,并不会铲除WebView存储到本地的数据。
public void clearFormData()


六、 获取页面信息

  WebView 中获取页面信息的API首要包括以下几块。

图解WebView -- (2) WebView 常用API详解

6.1 获取当时页URL

Gets the URL for the current page. This is not always the same as the URL passed to WebViewClient.onPageStarted because although the load for that URL has begun, the current page may not have changed.

public String getUrl()
  • 值得留意的,经过WebViewClientonPagStarted()获取的URL,与getUrl()获取到的不一定相同。由于尽管该URL已经开始加载,但当时页面或许还未改动

6.2 获取当时页原始URL

Gets the original URL for the current page. Also, there may have been redirects resulting in a different URL to that originally requested.

 public String getOriginalUrl()
  • 考虑到页面重定向,该办法回来原始恳求的URL。

6.3 获取当时网页标题

public String getTitle()

6.4 获取当时网页图标

public Bitmap getFavicon()

6.5 获取当时页SSL证书

public SslCertificate getCertificate()

6.6 获取HTML的高度

  • 获取的是HTML原始高度,不包括缩放后的高度。
public int getContentHeight()

6.7 获取HTML的宽度

  • 获取的是HTML原始宽度,不包括缩放后的宽度。
public int getContentWidth()

参考资料

  • WebView(网页视图)根本用法
  • Carson带你学Android:最全面、易懂的Webview运用教程
  • WebView Android 官方API文档
  • Android WebView的运用
  • WebView全面解析