-
LOAD_CACHE_ELSE_NETWORK:只要缓存可用就加载缓存,哪怕它们已经过期失效。如果缓存不可用就从网络上加载数据。
-
LOAD_NO_CACHE:不加载缓存,只从网络加载数据。
-
LOAD_CACHE_ONLY:不从网络加载数据,只从缓存加载数据。
通常我们可以根据网络情况将这几种模式结合使用,比如有网的时候使用LOAD_DEFAULT,离线时使用LOAD_CACHE_ONLY、LOAD_CACHE_ELSE_NETWORK,让用户不至于在离线时啥都看不到。
-
setDatabaseEnabled(boolean flag):启用或禁用数据库缓存。
-
setDomStorageEnabled(boolean flag):启用或禁用DOM缓存。
-
setUserAgentString(String ua):设置WebView的UserAgent值。
-
setDefaultEncodingName(String encoding):设置编码格式,通常都设为“UTF-8”。
-
setStandardFontFamily(String font):设置标准的字体族,默认“sans-serif”。
-
setCursiveFontFamily:设置草书字体族,默认“cursive”。
-
setFantasyFontFamily:设置CursiveFont字体族,默认“cursive”。
-
setFixedFontFamily:设置混合字体族,默认“monospace”。
-
setSansSerifFontFamily:设置梵文字
体族,默认“sans-serif”。 -
setSerifFontFamily:设置衬线字体族,默认“sans-serif”
-
setDefaultFixedFontSize(int size):设置默认填充字体大小,默认16,取值区间为[1-72],超过范围,使用其上限值。
-
setDefaultFontSize(int size):设置默认字体大小,默认16,取值区间[1-72],超过范围,使用其上限值。
-
setMinimumFontSize:设置最小字体,默认8. 取值区间[1-72],超过范围,使用其上限值。
-
setMinimumLogicalFontSize:设置最小逻辑字体,默认8. 取值区间[1-72],超过范围,使用其上限值。
以上就是一些WebSettings的常用方法,具体的使用以及一些缓存的问题会在接下来的代码以及文章中有更加直观的说明。
WebViewClient
从名字上不难理解,这个类就像WebView的委托人一样,是帮助WebView处理各种通知和请求事件的,我们可以称他为WebView的“内政大臣”。
-
onLoadResource(WebView view, String url):该方法在加载页面资源时会回调,每一个资源(比如图片)的加载都会调用一次。
-
onPageStarted(WebView view, String url, Bitmap favicon):该方法在WebView开始加载页面且仅在Main frame loading(即_整页加载_)时回调,一次Main frame的加载只会回调该方法一次。我们可以在这个方法里设定开启一个加载的动画,告诉用户程序在等待网络的响应。
-
onPageFinished(WebView view, String url):该方法只在WebView完成一个页面加载时调用一次(同样也只在Main frame loading时调用),我们可以可以在此时关闭加载动画,进行其他操作。
-
onReceivedError(WebView view, WebResourceRequest request, WebResourceError error):该方法在web页面加载错误时回调,这些错误通常都是由无法与服务器正常连接引起的,最常见的就是网络问题。
这个方法有两个地方需要注意:
1.这个方法只在与服务器无法正常连接时调用,类似于服务器返回错误码的那种错误(即HTTP ERROR),该方法是不会回调的,因为你已经和服务器正常连接上了(全怪官方文档(︶^︶));
2.这个方法是新版本的onReceivedError()方法,从API23开始引进,与旧方法onReceivedError(WebView view,int errorCode,String description,String failingUrl)不同的是,新方法在页面局部加载发生错误时也会被调用(比如页面里两个子Tab或者一张图片)。这就意味着该方法的调用频率可能会更加频繁,所以我们应该在该方法里执行尽量少的操作。
-
onReceivedHttpError(WebView view, WebResourceRequest request, WebResourceResponse errorResponse):上一个方法提到onReceivedError并不会在服务器返回错误码时被回调,那么当我们需要捕捉HTTP ERROR并进行相应操作时应该怎么办呢?API23便引入了该方法。当服务器返回一个HTTP ERROR并且它的status code>=400时,该方法便会回调。这个方法的作用域并不局限于Main Frame,任何资源的加载引发HTTP ERROR都会引起该方法的回调,所以我们也应该在该方法里执行尽量少的操作,只进行非常必要的错误处理等。
-
onReceivedSslError(WebView view, SslErrorHandler handler, SslError error):当WebView加载某个资源引发SSL错误时会回调该方法,这时WebView要么执行handler.cancel()取消加载,要么执行handler.proceed()方法继续加载(默认为cancel)。需要注意的是,这个决定可能会被保留并在将来再次遇到SSL错误时执行同样的操作。
-
WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request):当WebView需要请求某个数据时,这个方法可以拦截该请求来告知app并且允许app本身返回一个数据来替代我们原本要加载的数据。
比如你对web的某个js做了本地缓存,希望在加载该js时不再去请求服务器而是可以直接读取本地缓存的js,这个方法就可以帮助你完成这个需求。你可以写一些逻辑检测这个request,并返回相应的数据,你返回的数据就会被WebView使用,如果你返回null,WebView会继续向服务器请求。
-
boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest req