关于使用webview的一些坑和经验总结
2016-03-15 22:30
555 查看
WebView是基于webkit引擎展现web页面的控件,而且越来越多项目在使用hybrid模式,因此我们在日常开发中不可避免的回合WebView打交道,也会碰到各种各样的问题,有可能是手机系统版本问题,机型兼容问题,耗电问题,安全漏洞问题,资源释放问题,还罗列一些WebView的小功能点,因此特地总结一下,用来提高开发效率.
WebView.clearView()在api18以后被废弃,可以使用WebView.loadUrl(“about:blank”)代替
具体可以通过WebView中接口隐患与手机挂马利用了解.
这里推荐一个比较好的的解决方案
safe-java-js-webview-bridge
通过设置width、height、initial-scale、当前手机屏幕密度等还适配当前的手机,具体参考Supporting Different Screens in Web Apps
Pixel-Perfect UI in the WebView
在执行webView的ondestory之前,需要在当前布局remove WebView,因为可能会
碰到WebView.destroy() called while still attached的问题
在activity的onDestory调用webView.removeAllViews()、webView.onDestory()
WebView清空历史记录
WebView有提供clearHistory功能,但是要在onPageFinished()方法里调用才能调用goback方法,这样就略死板,而且加载一个url的时候有可能多次调用,因此查了下资料找到了一种解决办法clearView() This method was deprecated in API level 18. Use WebView.loadUrl("about:blank") to reliably reset the view state and release page resources (including any running JavaScript)
WebView.clearView()在api18以后被废弃,可以使用WebView.loadUrl(“about:blank”)代替
WebView的JS交互与安全性问题
总所周知,4.2以下的系统与本地交互可能会产生安全性问题,具体可以通过WebView中接口隐患与手机挂马利用了解.
这里推荐一个比较好的的解决方案
safe-java-js-webview-bridge
关于手机页面的适配
同一个Web页面可能在不同的手机上显示的效果不一样,可以在HTML的head标签里添加<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no">
通过设置width、height、initial-scale、当前手机屏幕密度等还适配当前的手机,具体参考Supporting Different Screens in Web Apps
Pixel-Perfect UI in the WebView
如果页面为https,图片为http地址的时候5.0+系统无法加载图片
5.0以上的系统默认屏蔽混合内容,需要开启setMixedContentMode(true)来支持非https文件的加载加快html加载速度
通过设置setLoadsImagesAutomatically(false)来关闭自动加载图片功能,保证页面加载出来在加载图片,只适用于API19以下不包括19,同时在onPageFinished里通过getLoadsImagesAutomatically()判断是否关闭,如果关闭则打开加载图片功能自定义加载错误页面
WebView在无网络状态下load网页会提示找不到网页而且还会暴露地址链接,我们可以在onReceivedError里面获取错误,然后可以load本地自定义错误页面String errorHtml = "<html><body>加载出错了!</body></html>"; mWebView.stopLoading(); mWebView.loadData(errorHtml, "text/html", "UTF-8");
WebView占内存问题
代码动态添加WebView(待验证)在执行webView的ondestory之前,需要在当前布局remove WebView,因为可能会
碰到WebView.destroy() called while still attached的问题
在activity的onDestory调用webView.removeAllViews()、webView.onDestory()
相关文章推荐
- android WebView组件使用总结
- 解决video标签在安卓webview下无法自动播放问题
- Android webview与js交换JSON对象数据示例
- android中WebView和javascript实现数据交互实例
- Android的webview支持HTML5的离线应用功能详细配置
- Android开发之WebView组件的使用解析
- Android中实现Webview顶部带进度条的方法
- Android WebView控件捕获用户输入的信息
- Android中访问证书有问题的SSL网页的方法
- 基于Android中Webview使用自定义的javascript进行回调的问题详解
- Android webview用法实例简析
- Android编程实现WebView自适应全屏方法小结
- Android编程使WebView支持HTML5 Video全屏播放的解决方法
- Android使用WebView播放flash的方法
- Android中WebView无法后退和js注入漏洞的解决方案
- Android编程实现WebView全屏播放的方法(附源码)
- android webview 中localStorage无效的解决方法
- Android使用原生组件WebView加载网页和数据的方法
- android webview 简单浏览器实现代码
- android 中 webview 怎么用 localStorage