原地址:http://blog.csdn.net/growing_tree/article/details/48710747
WebView常用方法及常见问题总结:
● load数据的三种方式
loadUrl(String url)
使用url地址加载数据,如果是保存在本地的assets文件夹中,使用样式为:
loadData(String data, String mimeType, String encoding)
使用网页内容加载数据,使用样式为:
注意:使用loadData方法经常会出现乱码的情况,因为WebView默认编码是“Latin-1”,通过mWebView.getSettings().getDefaultTextEncodingName()语句可以查看,所以需要设置WebView对象的编码格式为UTF_8:
或者直接使用loadDataWithBaseURL方法。
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)
使用网页内容加载数据,使用样式为:
扩展:如果url只是一个图片或者视频,正常情况下,loadUrl方法是无法展示的,但是可以通过loadDataWithBaseURL方法展示,具体操作如下:
当然,<img>标签的src属性值也可以直接使用图片或者视频的完整地址。
● setWebViewClient
使用WebView加载网页,避免打开浏览器
如果不为WebView设置WebViewClient的话,系统会使用手机默认浏览器打开为其设置的url链接,相反,如果设置了WebViewClient并且重写了WebViewClient的 shouldOverrideUrlLoading(WebView view, final String url)的方法,即可避免上述问题。
参考源码中对shouldOverrideUrlLoading(WebView view, final String url)的解释:
onReceivedError方法
onReceivedError方法能够接受网络错误:
而网上大多数的处理方式是view.loadUrl(指向一个assets目录下的html文件或者"about:blank"),这样处理的话,在重新刷新时就会刷新当前这个错误的页面,或者在处理goBack()时候会出现一些问题。而通过以上方式则可以避免相应的问题。
注意:
onReceivedError方法无法处理经典的404错误,其实想想也是,404也是服务器响应具体解决办法求解中。。。
● setDomStorageEnabled
WebView数据缓存分为两种:AppCache和DOM Storage(Web Storage)。他们是因为Web页面开发者的直接行为而产生。
如果Web页面中使用到了Dom缓存,需要在代码中设置:
否则, 将会导致web页面加载不出,而现实一片空白,控制台会打印:Uncaught TypeError: Cannot call method 'getItem' of null"之类的异常信息!
● destroy()方法
使用WebView浏览一些含有音频、视频信息的网页时,需要在所属Activity的生命周期中添加WebView的onPause()、onResume()以及destroy()方法,否则,当WebView所属Activity销毁时,web页面中的音视频不会停止播放。
● Url重定向导致goBack失效的问题
正常情况下,使用手机返回键,将会关闭WebView所属的Activity界面,而不会考虑到WebView里面的网页跳转,面对这种情况,我们会使用WebView的goBack()方法,如:
但是如果WebView加载的url链接发生了重定向行为,比如load的是B网页,但是B网页重定向到C网页,此时调用goBack,返回到B网页,B网页又重定向到C网页,如此循环,导致无法返回到B之前的网页或者无法通过返回键结束WebView所述的Activity。
总结如下,解决办法有三种:
1. 与前端开发人员沟通,让其修改网页源码,避免使用到重定向方法;
2. 自己在代码中使用ArrayList保存url链接,建立一个WebView的历史栈,过滤重定向跳转:
这里就涉及到一个问题,如何判定url是否发生重定向?
根据标准的http协议,30开头的状态码表示重定向(如果服务器自己定义了一套状态码,则无法判断),所以,需要在WebView每次loadUrl之前,先用HttpUrlConnection对象的getResponseCode()方法来获取状态码。
3. 使用WebView.copyBackForwardList()获取历史栈,指定url的格式过滤(需要和前端人员沟通,定义重定向url格式)。
● 设置缩放以及屏幕适配
为避免出现WebView在宽度上显示不全出现水平滚动的情况,可以设置WebView自适应屏幕:
这样,就算网页源码中没有含有viewport缩放的meta标签,也能使WebView在宽度上达到自使用的效果。
常用的meta标签内容如下:
1、width : 控制viewport的大小,可以指定一个值,如600, 或者特殊的值,如device-width为设备的宽度(单位为缩放为100%的CSS的像素)
2、height : 和width相对应,指定高度
3、initial-scale : 初始缩放比例,页面第一次加载时的缩放比例
4、maximum-scale : 允许用户缩放到的最大比例,范围从0到10.0
5、minimum-scale : 允许用户缩放到的最小比例,范围从0到10.0
6、user-scalable : 用户是否可以手动缩放,值可以是:①yes、 true允许用户缩放;②no、false不允许用户缩放
● 网页加载速度优化
参考地址: http://hunankeda110.iteye.com/blog/1807649
参考文章: