详解android 用webview加载网页(https和http)
作者:码农的小世界 发布时间:2021-12-29 11:14:30
1.Android 加载https请求的网页的时候 打不开
当load有ssl层的https页面时,如果这个网站的安全证书在Android无法得到认证,WebView就会变成一个空白页,而并不会像PC浏览器中那样跳出一个风险提示框。因此,我们必须针对这种情况进行处理。(这个证书限于2.1版本以上的Android 系统才可以)
wv.setWebViewClient(new WebViewClient(){
@override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error){
//handler.cancel(); 默认的处理方式,WebView变成空白页
handler.process();接受证书
//handleMessage(Message msg); 其他处理
}
// 这行代码一定加上否则效果不会出现
webView.getSettings().setJavaScriptEnabled(true);
查看Android浏览器源码在TabControl.Java类中SubWindowClient方法中找,如果只是简单的接受所有证书的话,就直接调process()方法就行了
写到这里之后,直接运行是页面是可以打开的。但是打好签名包之后,依旧打不开!!!
一路追踪之后,发现是那个方法被混淆了
proguard:mapping.txt
xx.xx.xxx
xx.xx.xxx this$0 -> a
void onReceivedSslError(android.webkit.WebView,android.webkit.SslErrorHandler,android.net.http.SslError) -> onReceivedSslError
所以还要必要在混淆文件proguard.cfg中,加入以下:
-keep public class android.net.http.SslError
-dontwarn android.webkit.WebView
-dontwarn android.net.http.SslError
-dontwarn Android.webkit.WebViewClient
还有一点要提到的是,如果手机添加了代理。也是打不开的
但是sslerror是从2.2才开始提供的。之前的版本怎么办?
可以把android2.2中onReceivedSslError()的源码导入到自己的工程中,具体方法如下:
先把android2.2包中的SslError.java和WebViewClient.java导入到自己的工程中,在导入时需要建立和android2.2源码包中一样的包名。然后在用webview的时候导包就导自己工程里的这个包名就行!
注意一下 webView 要设置的几个地方兴许能帮上忙:
1 . 默认情况下,不能访问 https,需要重写 WebViewClient 的 onReceivedSslError
ps: API Level > 2.1,或者提供 SslError.java 和 WebViewClient.java 文件
重写部分一般可以不做特殊处理,直接 handler.process(); 接受证书即可
2 . 默认情况下,不能弹 js 框,需要重写 WebChromeClient 的 onJsAlert
重写部分也不需要特殊处理,直接返回 super.onJsAlert(view, url, message, result);
pps: 要 setWebViewClient 和 setWebChromeClient,webView 才能生效
2.Android 用webview加载网页 可能会出现另外一种情况:
webview加载的网页是http请求的 ,如果网页里有一张图片,并且该图片的地址是https请求的,这时候用webview加载网页,图片是不显示的。
会报这种错
Mixed Content as loaded over HTTPS, but requested an insecure image
意思是 http请求和https请求混淆了
注意: 用webview加载网页,一定用同一种请求
android 5.0 webview不能加载http与https混合内容的问题
在Android Lollipop上webview默认不允许加载http与https混合内容,比如你访问的网页为http://xxx.com/a.html,则如果a.html包含了https的res,则此res不会显示。如果仔细观察log,可以看到如下的内容提示:
。。。。。。was loaded over HTTPS, but requested an insecure image。。。。。。。。。。
So,该怎么解决呢?很简单,只需设置webSettings,允许其加载混合网络协议内容即可。
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
来源:http://blog.csdn.net/qq_30740239/article/details/54141106


猜你喜欢
- println()直接打印我们都知道println()如果打印的是基本数据类型的话直接打印出来的就是值,你如果是引用数据类型呢?🍑除掉这四类
- 360首页搜索效果如下1、完成编写的schoolnet校园网主要目录结构如下主要实现支持中文、拼音首字母、拼音全字母的智能搜索和换肤页面效果
- 单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。私有的构造方法指向自己实例的私有静态引用以自己实例为返回值的静
- 一丶前言在之前我们学习了SpringBoot自动装配如何实现的,我们总结了Spring IOC的底层原理。但是我们还是不知道SpringAp
- /*最小树形图图模版-朱刘算法模版说明:点标号必须0-(N-1) 必须去除到自身的点(到自身的边的边权赋无限大)*/
- 1.添加引用工具箱---右键---选择项--COM组件--Adobe PDF Reader2.使用方法OpenFileDialog open
- 一、代理模式 代理模式是常用的java设计模式,特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委
- Javaweb获取表单数据的几种方式一、通过键值对的形式获取表单数据getParameter(String name):通过key,返回一个
- 最近工作的时候发现软件里面通过查询ARP表查询某一IP对应的ARP条目的时,概率性出现查询到的ARP条目为空,一开始怀疑Ping通但是没有学
- 1. 项目背景最近参加了Compose挑战赛的终极挑战,使用Compose完成了一个天气app。之前几轮挑战也都有参与,每次都学到不少新东西
- 本文主要为大家分享了MyEclipse中安装使用Maven的方法,供大家参考,具体内容如下Step1:下载mavenhttp://maven
- 本文实例讲述了Java使用Thread和Runnable的线程实现方法。分享给大家供大家参考,具体如下:一 使用Thread实现多线程模拟铁
- springboot 启动找不到主类利用eclipse的maven插件,清理了了一下springboot的项目,结果再启动就找报找不到主类的
- 一、抽象类1.抽象类1.1抽象类的定义在Java面向对象当中,所有的对象都是用过类进行描绘的,但是并不是所有的类都是用来描绘对象的,如果一个
- 前言回调的核心就是回调方将本身即this传递给调用方,这样调用方就可以在调用完毕之后告诉回调方它想要知道的信息。1、什么是回调软件模块之间总
- 一、对AOP的初印象首先先给出一段比较专业的术语(来自百度):在软件业,AOP为Aspect Oriented Programming的缩写
- 在android中常用存储数据的基本就三种,sqlite,SharedPreferences,文件存储,其中针对于对象存储,使用sqlite
- Flyway的使用环境:SpringBoot 2.0.4.RELEASE为什么要用Flyway?开发人员在合作的时候经常遇到以下场景:1.开
- fifter、servlet、interceptorfifter用来处理请求头、请求参数、编码的一些设置,然后转交给servlet,处理业务
- 目录简介强引用软引用弱引用虚引用简介从JDK1.2版本开始,把对象的引用分为四种级别,从而使程序能更加灵活的控制对象的生命周期。这四种级别由