安卓WebView问题总汇(持续更新)
来源:互联网 发布:大数据框架hadoop 编辑:程序博客网 时间:2024/05/22 07:08
WebView在现在的项目中使用的频率应该还是非常高的。如果有对webView了解不太多的可以去看我以前写的一个博客,里面有详细的WebView介绍,点击进入
需要重写WebViewClient的onReceivedSslError方法
我个人做的项目里面有很多H5界面,并且跟H5交互,在做项目过程中出现了很多问题,下面来总结一下自己遇到的问题:
Android 7.0 WebView加载https出现空白页:
@Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { /** * https 请求 webview 有 证书校验 * 为了适配安卓7.0 * onReceivedSslError 过滤掉 部分错误 */ if (error.getPrimaryError() == SslError.SSL_DATE_INVALID || error.getPrimaryError() == SslError.SSL_EXPIRED || error.getPrimaryError() == SslError.SSL_INVALID || error.getPrimaryError() == SslError.SSL_UNTRUSTED) { handler.proceed(); } else { handler.cancel(); } super.onReceivedSslError(view, handler, error); }
用户丢失,登录不通过验证,Cookie丢失问题:请点击这里进入
怎么用自带的浏览器去打开网页:
mWebView.setWebViewClient(new WebViewClient(){
//给WebView设置自己的WebViewVlient 然后重写shouldOverrideUrlLoading//并且返回值设置为true就可以了 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } });
关于缓存方面的:缓存模式LOAD_CACHE_ONLY: 不使用网络,只读取本地缓存数据LOAD_DEFAULT: (默认)根据cache-control决定是否从网络上取数据。LOAD_NO_CACHE: 不使用缓存,只从网络获取数据.LOAD_CACHE_ELSE_NETWORK,只要本地有,无论是否过期,或者no-cache,都使用缓存中的数据。 结合使用(离线加载):if (NetStatusUtil.isConnected(getApplicationContext())) { webSettings.setCacheMode(WebSettings.LOAD_DEFAULT);//根据cache-control决定是否从网络上取数据。} else { webSettings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);//没网,则从本地获取,即离线加载}webSettings.setDomStorageEnabled(true); // 开启 DOM storage API 功能webSettings.setDatabaseEnabled(true); //开启 database storage API 功能webSettings.setAppCacheEnabled(true);//开启 Application Caches 功能String cacheDirPath = getFilesDir().getAbsolutePath() + APP_CACAHE_DIRNAME;webSettings.setAppCachePath(cacheDirPath); //设置 Application Caches 缓存目录注意: 每个 Application 只调用一次 WebSettings.setAppCachePath(),WebSettings.setAppCacheMaxSize()
js调用原生方法:
WebSettings webSettings = mWebView .getSettings(); webSettings.setJavaScriptEnabled(true); mWebView.addJavascriptInterface(new InsertObj(), "jsObj");//上面这是前提!!!//然后实现上面的类,这个类提供了四个方法,注释的非常清楚。class InsertObj extends Object { //给html提供的方法,js中可以通过:var str = window.jsObj.HtmlcallJava(); 获取到 @JavascriptInterface public String HtmlcallJava() { return "Html call Java"; }}
关于自定义加载框以及标题的问题:
WebChromeClient mWebChromeClient = new WebChromeClient() { //获得网页的加载进度,显示在右上角的TextView控件中 @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress < 100) { String progress = newProgress + "%"; } else { } } //获取Web页中的title用来设置自己界面中的title //当加载出错的时候,比如无网络,这时onReceiveTitle中获取的标题为 找不到该网页, //因此建议当触发onReceiveError时,不要使用获取到的title @Override public void onReceivedTitle(WebView view, String title) { MainActivity.this.setTitle(title); }}
阅读全文
0 0
- 安卓WebView问题总汇(持续更新)
- 安卓开发遇到的一些问题(持续更新)
- ci基础知识总汇(持续更新)
- iOS APP 上架 APP Store 被拒问题总汇 二进制文件被拒绝(持续更新)
- WebView问题总汇
- 安卓第三方问题集合(持续更新)
- 安卓知识点及问题处理方案记录,持续更新~
- webView项目总结(持续更新...)
- 有关安卓的设计(持续更新)
- 安卓 蓝牙BLE开发(持续更新)
- IOS 常用技术总汇 持续更新中
- Amap/google[高德和谷歌]地图加载不出来,【问题总汇】-持续更新...
- 安卓遇上JqueryMobile(持续更新篇)
- 问题汇总(持续更新)
- 问题记录(持续更新)
- 每日问题(持续更新)
- 问题记录(持续更新)
- 问题记录(持续更新)
- MyBatis第二课:入门配置
- scala(13)-----集合(Collection)-------Set(集合)
- redis安装php扩展
- Mysql数据库导入导出
- Vim编辑nginx配置文件时高亮显示
- 安卓WebView问题总汇(持续更新)
- PHP实现选择排序算法
- ebpf 实例
- @RequestParam,@PathParam,@PathVariable等注解区别
- POJ1446 Girls and Boys
- 欢迎使用CSDN-markdown编辑器
- 坑爹的logstash条件判断
- 中小企业迎品牌建设最佳契机 中企动力赋能数字化智能经营
- 正则表达式手机号(大陆,香港)