细数WebView那些坑

来源:互联网 发布:2016开淘宝店晚不晚 编辑:程序博客网 时间:2024/05/02 04:25

1、addJavascriptInterface不生效

出于安全考虑,为了防止Java层的函数被随便调用,Google在4.2版本之后,规定允许被调用的函数必须以@JavascriptInterface进行注解


2、WebView导致的内存泄漏

方法1、动态创建WebView对象,并在onDestroy中  removeView(WebView)  并且 调用webView.destroy()

方法2、把使用WebView的Activity开启新的进程,在onDestroy的时候System.exit(0)粗暴释放进程所有内容


3、Https网页中http资源无法加载(图片无法正常显示)

先加入 setting.setBlockNetworkImage(false);

https链接中的http资源无法正常加载(图片无法显示)Android webview 从Lollipop开始webview默认不允许混合模式,https当中不能加载http资源,需要设置开启。

       if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            setting.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
       }

4、网页中(链接不论http还是https的)https资源无法加载

这个是因为部分企业改的webView不认可你所使用的https的ssl证书,比如华为7.0的webview 不认可  "沃通CA"公司的https证书。

当网页中出现需要加载资源的时候,系统会调用WebViewClient的shouldInterceptRequest方法,这个方法的默认返回值为null,当为null的时候,会默认去自行加载资源,如果我们像做缓存自己下载,可以通过这个方法(这个方法可以做,比如广告拦截,logo替换),webview如果自行加载资源的时候,会检验证书,如果不认可证书,会调用onReceivedSslError方法,这个方法的默认调用是handle.cancel,也就是取消这个请求,我们将其改成handle.proceed,接受不被认可的证书,注意这里要加上证书的判断,不要认可所有的证书。


5、加载出的图片,很宽很高

是因为网页的图片组件没有限定最宽宽度,导致图片默认加载自身分辨率宽高

replace("<img", "<img style='max-width:100%;height:auto;'")



======待续====