WebView加载html图片不显示问题
参考链接
[1] webview加载https链接(终极解决方案,包括https链接加载http图片显示失败)
[2] Android WebView 图片显示不了 http和https混合问题
近期在项目中出现了一个问题,WebView加载html时,部分图片显示不出来,一直显示裂图,多方搜索,可能是因为http和https的混合问题。
原因
在Android5.0 以及以上的系统,当WebView加载的链接为Https开头,但是链接里面的内容,比如图片为Http链接,这时候,图片就会加载不出来。
这个是http和https的混合问题。而且只会在Android5.0及以上的出现。那是因为从Android5.0开始,WebView默认不支持同时加载Https和Http混合模式。
分析
从Android5.0以后,当一个安全的站点(https)去加载一个非安全的站点(http)时,需要配置Webview加载内容的混合模式,一共有如下三种模式:
- MIXED_CONTENT_NEVER_ALLOW:Webview不允许一个安全的站点(https)去加载非安全的站点内容(http),比如,https网页内容的图片是http链接。强烈建议App使用这种模式,因为这样更安全。
- MIXED_CONTENT_ALWAYS_ALLOW:在这种模式下,WebView是可以在一个安全的站点(Https)里加载非安全的站点内容(Http),这是WebView最不安全的操作模式,尽可能地不要使用这种模式。
- MIXED_CONTENT_COMPATIBILITY_MODE:在这种模式下,当涉及到混合式内容时,WebView会尝试去兼容最新Web浏览器的风格。一些不安全的内容(Http)能被加载到一个安全的站点上(Https),而其他类型的内容将会被阻塞。这些内容的类型是被允许加载还是被阻塞可能会随着版本的不同而改变,并没有明确的定义。这种模式主要用于在App里面不能控制内容的渲染,但是又希望在一个安全的环境下运行。
在Android5.0以下,默认是采用的MIXED_CONTENT_ALWAYS_ALLOW模式,即总是允许WebView同时加载Https和Http;而从Android5.0开始,默认用MIXED_CONTENT_NEVER_ALLOW模式,即总是不允许WebView同时加载Https和Http。
作者:Json森
来源:CSDN
原文:https://blog.csdn.net/tinson12321/article/details/81627070
版权声明:本文为博主原创文章,转载请附上博文链接!
解决方案
在webview加载页面之前,设置加载模式为:
MIXED_CONTENT_ALWAYS_ALLOW(不太安全),
或者
MIXED_CONTENT_COMPATIBILITY_MODE(个人建议)。
另外在webview设置中还可以加上另外一个设置:
websettings.setBlockNetworkImage(false);
加上混合内容模式设置,代码如下:
/*解决图片不显示*/
websettings.setBlockNetworkImage(false);//不阻塞网络图片
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//允许混合(http,https)//websettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);websettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE);
}
通过上面的设置,发现有些图片仍然不能显示。又经过多方搜索,发现了其他问题。
图片不显示原因还有可能是证书问题。
只要涉及到https,大家都会第一时间想到证书验证。当然,这是没问题的。如果有要求,这个证书验证是必须的。一般情况下,都是需要证书的(有证书毕竟安全些)。
Android
WebView
组件加载网页发生证书认证错误时,会调用WebViewClient
类的onReceivedSslError
方法,在这个方法里,我们可以点击源码看到SslErrorHandler
中有两个主要的方法可以调用
- 【1】cancel( ):停止加载问题页面
- 【2】proceed( ):忽略SSL证书错误,继续加载页面
作者:夜封雪
来源:简书
原文:https://www.jianshu.com/p/56e2b0bf9ab2
版权声明:本文为博主原创文章,转载请附上博文链接!
如果我们不考虑证书安全,则可以直接这样写
webView.setWebViewClient(new WebViewClient() {@Overridepublic void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {handler.proceed();//接受所有网站的证书}
});
既然用到了https,我们大部分时候都是为了网络安全问题,如果想要更好的方案,可以参考博客:
webview加载https链接(终极解决方案,包括https链接加载http图片显示失败)
WebView加载html图片不显示问题相关推荐
- webview加载html图片不显示图片,WebView加载网页不显示图片解决办法
对于大家来讲WebView肯定很熟悉,因为我们在日常开发中经常用到它.所以对于它的一些基本用法我就不在这啰嗦了,直接进入正题. 我遇到的问题就是在使用WebView加载网页的时候图片不显示(我手机系统 ...
- vue 加载image图片不显示解决
vue 加载image图片不显示解决------------写了个vue的demo(自己做一个表格,可以横向增加列也可以纵向增加行)想给demo加图片怎么都出不来,,,,,查图片太大?加载位置不对?配 ...
- PyQt5加载png图片无法显示出透明度的解决办法
参考链接 pyqt5设置按钮透明度 PyQt5 加载 png 图片无法显示出透明度 博文小记 一.问题描述 我在使用 QLabel 控件,用 QPixmap 加载 png 图片时,发现原先有透明度的图 ...
- android动态图片适配,Android适配利用webview加载后图片显示过大的问题解决
前言 最近在开发过程中,需要用webview控件来展示文章的详情页面,流程是通过请求后台数据,然后用控件加载,而后台返回的文章详情页面是直接网页端使用的,并没有对移动端进行适配,导致webview加载 ...
- flutter webview加载http图片失败处理
1.简介 开始接手flutter项目,项目flutter版本2.5.3,目前最新2.10.3. 项目中使用webview为 flutter_webview_pro 1.0.0 源码修改版,已经支持we ...
- Webview加载本地图片的方案对比
前言 先讲讲为什么会有这篇blog,话说前几天做个模块,要求是这样的: 做一个webview的页面,功能类似于微信发朋友圈一样,要求能上传本地图片到webview中进行展示,并按用户喜好添加和删除,当 ...
- 用js实现加载本地图片并显示并将图片信息上传至服务端
大体上分如下步骤: 1.建立input标签 通过定义type='file'来实现打开选择的文件 var mousestart = cursorPosition(event);function curs ...
- Glide加载部分图片不显示问题
Glide版本为4及其以上 图片不显示原因 没有添加INTERNET网络权限 老版本Glide无法加载https图片(需要使用okhttp忽略证书) 图片Url无法连接 图片返回数据不全且格式不正确 ...
- 成功解决Glide3.7.0加载https图片,显示占位图问题。
平时我们使用Glide加载http网址的图片的时候,图片可以正常加载出来,但是如果服务器端加上了安全认证,当加载自签名的https图片的时候就会报如下错误(证书路径验证异常). Trust ancho ...
最新文章
- 软件项目技术点(21)——自动保存和恢复
- ubuntu 搭建webrtc环境
- 《PRML_Translation》pdf
- HTML5 Canvas、内联 SVG、Canvas vs. SVG
- Java并行程序基础
- 插入脚注把脚注标注删掉_地狱司机不应该只是英国电影历史数据中的脚注,这说明了为什么...
- 你知道自己执行的是哪个jre吗?
- 百度之星初赛(A)——T5
- 部分xcode插件可能有新版本
- Python中expected an indented block
- 我误会atoi()函数了
- 【大云制造】公有云产品及解决方案V4.0——全新面貌,重新出发
- mysql sqlyog命令_SQLyog的基本使用
- Amesim学习——气体混合室仿真
- ajax 上传图片进度条,ajax实现图片上传与进度条
- 《人生十论》. 钱穆
- 加拿大卡尔顿大学暑课两个月入门Java全记录_1
- device_register分析
- 奥古斯丁:我是一去不回的风
- XP系统,开机启动报NTDETECT 失败