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

关于使用webview的一些坑和经验总结

2016-03-15 22:30 555 查看
WebView是基于webkit引擎展现web页面的控件,而且越来越多项目在使用hybrid模式,因此我们在日常开发中不可避免的回合WebView打交道,也会碰到各种各样的问题,有可能是手机系统版本问题,机型兼容问题,耗电问题,安全漏洞问题,资源释放问题,还罗列一些WebView的小功能点,因此特地总结一下,用来提高开发效率.

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()
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  webview