您的位置:首页 > 移动开发

WebView的分析与使用

2016-05-24 11:36 561 查看
            在Android中加载网页就要使用到了WebView,它是基于WebKit渲染引擎,而在最新的Android4.4起,WebView开始基于Chromium。          在我们使用WebView中,会用到最多的就是WebSettings,WebViewClient,WebChromeClient这三项,使用这三项可以帮助我们解决浏览网页中的绝大多数问题。

1  WebSettings

    使用webView加载网页的时候,我们可以使用 WebSettings来对网页的加载进行一些定制,例如设置缩放网页,是否加载图片等定制功能。在WebView对象被创建时WebSettings对象也会被同时创建,并附有默认的settings值。WebSettings的生命周期同WebView生命周期相同,如果WebView被destroy 则WebSettings应该被释放,否则如果使用WebSettings继续再操作的话, 会抛出异常IllegalStateException。
WebSettings settings = webView.getSettings();
        WebSettings对象可以通过WebView.getSettings()获得。  WebSettings 的api详解:
settings.setBlockNetworkImage(boolean flag);
   设置网页浏览为无图模式。true为无图模式。
settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
设置网页的默认缩放。可设置的值有ZoomDensity.FAR  ,ZoomDensity.MEDIUM , ZoomDensity.CLOSE .是根据不同的屏幕分辨率来进行设置,不过在最新的api中已经过时了。
settings.setUseWideViewPort(boolean flag);
设置可以缩放,api说明中用这个替代了setDefaultZoom.
settings.setLoadWithOverviewMode(boolean flag);
设置网页适应webView的大小。一般与setUseWideViewPort(true);一起使用。
 settings.setCacheMode(int mode);
设值缓存的类型。 一个普通网页的加载cache会被检查,内容也会被重新校验,第一次访问网页时,会存储cache到本地,设置策略可以让网页加载方式发生变化,cache模式有如下几种: LOAD_DEFAULT: 如果我们应用程序没有设置任何cachemode, 这个是默认的cache方式。 加载一张网页会检查是否有cache,如果有并且没有过期则使用本地cache,否则                                   从网络上获取。 LOAD_CACHE_ELSE_NETWORK: 使用cache资源,即使过期了也使用,如果没有cache才从网络上获取。 LOAD_NO_CACHE: 不使用cache 全部从网络上获取。 LOAD_CACHE_ONLY:  只使用cache上的内容。
settings.setJavaScriptEnabled(boolean flag);
设置网页允许脚本。
settings.setAppCacheEnabled(boolean flag);设置允许html5缓存。设置html5缓存路径。   settings.setDatabaseEnabled(boolean flag);
设置启用数据库,用于离线缓存。
settings.setAllowFileAccess(boolean flag));
设置允许访问文件。
settings.setUserAgentString(String ua);
设置浏览器标识。
settings.setSaveFormData(boolean save);settings.setSavePassword(boolean save);
设置保存用户表单,保存密码。

2 WebViewClient

webViewClient用来帮助webView处理各种通知和请求事件的。例如当页面开始加载,和加载完毕的时候。
void onLoadResource(WebView view, String url)
        在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
void onPageStarted(WebView view, String url, Bitmap favicon)
在页面加载开始时调用。
void onPageFinished(WebView view, String url)
       在页面加载完成时调用。
boolean shouldOverrideUrlLoading(WebView view, String url)
       在点击请求是链接的时候才调用,return true表示在当前webView打开链接。
WebResourceResponse shouldInterceptRequest(WebView view, String url)
       在处理webView时,需要拦截或替换某些链接可以用到这个方法。这个请求是在非ui线程。       shouldInterceptRequest有两种重载。       public WebResourceResponse shouldInterceptRequest (WebView view, String url)从API 11开始引入,API 21弃用       public WebResourceResponse shouldInterceptRequest (WebVid859ew view, WebResourceRequest request)  从API 21开始引入
void onReceivedHttpAuthRequest(WebView view,final HttpAuthHandler handler, final String host, final String realm)
      通知应用程序WebView接收到了一个Http auth的请求,应用程序可以使用supplied 设置webview的响应请求。默认行为是cancel 本次请求。
void onReceivedSslError(WebView view, final SslErrorHandler handler,SslError error)
当网页加载资源过程中发现SSL错误会调用此方法。我们应用程序必须做出响应,是取消请求handler.cancel(),还是继续请求handler.proceed();内核的默认行为是handler.cancel();SslError.SSL_UNTRUSTED:网站证书没有可信任的发行者。SslError.SSL_IDMISMATCH:站点名和证书不匹配。SslError.SSL_EXPIRED:证书已经过期。
SslError.SSL_NOTYETVALID:证书没有验证。

3 WebChromeClient

WebChromeClient主要辅助WebView处理Javascript的对话框、网站图标、网站title、加载进度等。
<span style="font-family:SimSun;font-size:12px;">void onProgressChanged(WebView view, int newProgress)</span>
通知应用程序当前网页加载的进度。
<span style="font-size:12px;">void onReceivedIcon(WebView view, Bitmap icon)</span>
当页面接收到icon的时候调用。
void onReceivedTitle(WebView view, String title) 
当接收到Title的时候调用。
boolean onCreateWindow(WebView view, final boolean dialog, final boolean userGesture, final Message resultMsg)
请求创建一个新的窗口。
void onShowCustomView(View view, CustomViewCallback callback)
在webView中播放视频时用到,当需要全屏一个视频时,重写这个方法。
void onHideCustomView()
退出视频时使用。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息