WebView问题总结

1、WebView的使用

参考以前写的一边博文,Android中WebView的用法 , 以及Runoob上的一篇文章,WebView的使用 。


(1)java和js交互,通过webView的addJavascriptInterface这个方法来实现交互,但是这个方法存在远程代码执行漏洞,远程攻击者可    以通。过java反射利用该方法的漏洞执行任意java对象的方法。addJavascriptInterface是给js调用本地的java方法。

        webView漏洞

       解决这个问题的方法:

让js通过WebChromeClient的onJsPromt方法把一段文本信息传递过来,这段文本信息中包含需要调用方法的方法名、参数等信息,然后在java中解析,得到需要调用的方法。


(2)防止内存泄漏,在Activity的onDestroy方法里面先让Layout把webView给remove掉,然后调用webView的removeAllViews和destroy方法。


(3)jsbridge用于web和Native代码进行交互


(4)webViewClient.onPageFinished->webChromeClient.onProgressChanged

因为当当前加载的网页产生跳转的时候,webViewClient.onPageFinished方法就会被调用很多次。


(5)webView会自己开启线程,不用的时候要销毁。


(6)硬件加速导致的页面渲染的问题,出现页面加载白块,解决方式是暂时关闭硬件加速。


(7)WebView的缓存机制点击打开链接

mWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);

  当我们加载Html时候,会在我们data/应用package下生成database与cache两个文件夹:
我们请求的Url记录是保存在webviewCache.db里,而url的内容是保存在webviewCache文件夹下.
WebView中存在着两种缓存:网页数据缓存(存储打开过的页面及资源)、H5缓存(即AppCache)。
缓存构成
/data/data/package_name/cache/
/data/data/package_name/database/webview.db

/data/data/package_name/database/webviewCache.db

综合可以得知 webview 会将我们浏览过的网页url已经网页文件(css、图片、js等)保存到数据库表中

webView的5种缓存模式

LOAD_CACHE_ONLY:  不使用网络,只读取本地缓存数据
LOAD_DEFAULT:  根据cache-control决定是否从网络上取数据。
LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.

LOAD_CACHE_ELSE_NETWORK模式下,无论是否有网络,只要本地有缓存,都使用缓存。本地没有缓存时才从网络上获取。

(8)图片点击

在addJavascriptInterface的接口中添加OnImageClick方法,通过js将图片的url传递过来,然后在java部分启动一个Activity同来显示图片。

(9)图片缓存

参考之前写的一个Demo,点击打开链接

猜你喜欢

转载自blog.csdn.net/wei_lei/article/details/76735263