Android 5.0 及以上,webview 加载https网页中的http图片加载不出来,踩坑!

Android5.0及以上系统,当WebView加载的链接为https开头,但是链接里面的内容,比如图片为http链接,这时候,图片就不能正常加载(加载不出来)。

由于自己在项目中踩坑遇到此问题,也是各种查阅尝试,最终得以解决,特此记录下:

 在Android5.0中,WebView方面做了些修改,如果你的系统target api为21以上:

  • 系统默认禁止了mixed content和第三方cookie。可以使用setMixedContentMode() 和 setAcceptThirdPartyCookies()以分别启用。
  • 系统现在可以智能选择HTML文档的portion来绘制。这种新特性可以减少内存footprint并改进性能。若要一次性渲染整个HTML文档,可以调用这个方法enableSlowWholeDocumentDraw()
  • 如果你的app的target api低于21:系统允许mixed content和第三方cookie,并且总是一次性渲染整个HTML文档。

一、WebView链接为https,内容图片为http,图片不能正常显示,原因主要是:

       webview 从Lollipop(5.0)开始 webview默认不允许混合模式,https当中不能加载http资源,如果要加载,需单独设置开启,

二、解决方案:

1.在加载钱先阻塞图片加载:

setting.setBlockNetworkImage(true);

(在webview加载页面之前,设置加载模式为MIXED_CONTENT_ALWAYS_ALLOW)
// 允许从任何来源加载内容,即使起源是不安全的
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
2.在WebView 渲染完成后,解除阻塞,加载图片 
webView.setWebViewClient(new WebViewClient() {
                @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
                @Override
                public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                    String  s = request.getUrl().toString();
                    view.loadUrl(s);
                    return true;
                }

                @Override
                public void onPageFinished(WebView view, String url) {
                    progressBar.setVisibility(View.GONE);
                    Log.i(TAG, "onPageFinished-->" + url);

                    settings.setBlockNetworkImage(false);//解除阻塞
                    //判断webview是否加载了,图片资源
                    if (!settings.getLoadsImagesAutomatically()) {
                        settings.setLoadsImagesAutomatically(true); //设置wenView加载图片资源
                    }

                    super.onPageFinished(view, url);
                }

            });
        }

 更多参考链接:Android官网解释链接 

三、相关问题拓展

WebView中加载页面错误,自定义view 处理加载失败页面

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值