一、概述
webview是android承载网页的一个控件,使用的是android系统自带的webkit浏览器。
二、使用
跟其他控件使用一样,webview可以以标签或者动态生成。
1、loadUrl(String url)
使用此方法加载网页url 加载网页
2、addJavascriptInterface(Object o, String name)
android 承载 网页的时候,可能需要和网页交互,这时候此方法派上用场了。他提供给这个注入对象的方法,通过javascript作为中间桥梁传给网页,网页接收到android传输的对象,操作对象实现互通。使用此方法的前提是需要webView.getSettings().setJavaScriptEnabled(true),允许js注入。
三、漏洞
1、布局文件将webview写入容器的时候,记得要回收,不然会造成内存泄露。可以在页面销毁的时候 把 webview置空通知GC回收。(原因是开启了子线程)
2、使用webview的时候,系统会单独开启一个进程,后台耗电。如果不销毁回收的话,会造成耗电损失。
3、addJavascriptInterface安全漏洞问题。sdk 17 以前没有限制 使用 addJavascriptInterface对象方法,远程攻击者可通过java反射机制API利用漏洞执行任意java对象的方法,攻击或者获取隐私。解决办法是 sdk 17及以后通过@addJavascriptInterface方法注解限制使用js调用方法,解决任意调用java方法问题。在sdk17 之前,采用js 通过方法 prompt()方法,将特定的对象和方法传到Android端,Android 端在 onJsPrompt方法中拦截筛选出维护的方法,利用java反射,进行调用,实现调用安全。
4、开启硬件加速的话,虽然可以加快渲染的速度,但是会出现白屏闪烁,解决办法就是不开启硬件加速。
5、明文密码保存安全危险:webview默认保存setSavePassword(true),如果用户选择保存密码,将会保存到本地,存在密码安全问题。解决办法是密文保存,密文解密取出, 或者 setSavePassword(false)
四、WebView页面加载优化
webview页面加载问题问题: 一般情况下webview加载网页比较慢,原因有以下几方面:
1、网络图片资源等比较多,造成加载变慢
2、html 要调用 css、js代码,而且js的解析过程复杂,使得加载过程变慢
3、网页的网络请求问题造成加载慢,有时网络不好,一直出现一片空白的情况
4、由于现在市面上Android机型碎片化,性能问题不可控,可能存在性能问题。
这些问题都有可能导致webview加载网页速度变慢,以下提供了了几个方案解决上面问题。
解决方案:
1、针对问题三,网络问题有时必无可避免时,可采取将进度条设置快加载完的假象,让用户增加耐心停留在网页加载页面。实则,这只是一个表面优化的方案,并不能改变webview的加载速度。
2、本地预加载资源。先将图片资源等批量加载存储在本地,网页加载的时候优先从本地获取资源,这个方案大大的解决了由于资源加载过慢的问题。 不过会造成本地资源空间的堆积和资源更新问题。因此需要不定时清理本地资源缓存,和做好资源版本更新。
3、webview自带的缓存机制(前端h5的缓存机制)
4、Application Cache 缓存: 将加载过的网页 缓存到指定的本地缓存路径当中,android端通过settings.setAppCachePath(cacheDirPath) 是去实现存储路径。 只能解决第二次进去加载加快的问题。 比方案3的优势在于,不需要先请求网络。
5、Dom Storage 缓存机制:跟 Application Cache 缓存差不多,不过Dom Storage 缓存机制是以键值对的方式存储,类似android的sp,也类型cookies,使用方法settings.setDomStorageEnabled(true);开启缓存方式
6、IndexedDB 缓存机制:也是属于 NoSQL 数据库,通过存储字符串的 Key - Value 对来提供,存储 复杂、数据量大的结构化数据。使用settings.setJavaScriptEnabled(true);就开启了。
本文详细介绍了Android中WebView的使用,包括加载网页、与网页交互、潜在的安全问题及优化策略。强调了WebView的内存管理、JavaScript接口安全、页面加载速度优化等方面,提供了解决方案如本地资源预加载、缓存机制等。

1480

被折叠的 条评论
为什么被折叠?



