WebView小技巧

WebView用到最多的就是loadurl,一句代码皆大欢喜,但是没办法,需求来了我们就得动手解决。

1.web页面是需要加密信息才能显示,这时候需要我们带参数过去验证

例如需要登录信息才能浏览,2个方法

a.保证WebView页面的session与登录接口返回的session值一致

清除web浏览器中的session

CookieSyncManager.createInstance(getContext());

CookieSyncManager.getInstance().startSync();

CookieManager.getInstance().removeSessionCookie();

给http设置拦截器 可以捕获request和response信息,从而我们可以获得我们需要的session值

OkHttpClient.Builder clientBuilder =new OkHttpClient.Builder();

clientBuilder.addInterceptor(new HttpLoggingInterceptor());

重写拦截器的Response  intercept(Chain chain)方法

Request request = chain.request();

Response response = chain.proceed(request);

response.header("Set-Cookie")即获得 session值

设置session

try {

    CookieSyncManager.createInstance(context);

    CookieManager cookieManager = CookieManager.getInstance();

    cookieManager.setAcceptCookie(true);

    cookieManager.removeSessionCookie();// 移除

    cookieManager.removeAllCookie();

    String oldCookie = cookieManager.getCookie(url);

    URL aURL =new URL(url);

    StringBuilder sbCookie =new StringBuilder();

    sbCookie.append(PreferencesHelper.getData("COOKIE"));

    //webview在使用cookie前会前判断保存cookie的domain和当前要请求的domain是否相同,相同才会 发送cookie

  //注意,是getHost(),不是getAuthority(),

    sbCookie.append(String.format(";domain=%s", aURL.getHost()));

    String cookieValue = sbCookie.toString();

    cookieManager.setCookie(url, cookieValue);

    CookieSyncManager.getInstance().sync();

    String newCookie = cookieManager.getCookie(url);

    webView.loadUrl(url);

}catch (Exception e) {

}

b.使用Webview.postUrl();传递验证参数

SearchBodyBean bean =new SearchBodyBean();

bean.sid = PreferencesHelper.getData(Constan.SID);

bean.userName = PreferencesHelper.getData(Constan.ACOUNT);

 bean.token = AESUtil.shaEncrypt(bean.userName + bean.sid + Constan.AES_KEY);

 webView.postUrl(url, new Gson().toJson(bean).toString().getBytes());

这个方式比较简单,但是要注意出现特殊字符导致数据缺失的问题,出现较多的有数据中存在“+”号,到后台了,“+”号全部都不见了。

由于数据是加密过的BASE64,会不时出现一些符合,如

webview.postUrl("www.testurl.com","data=abcdefg");

加密过后变成了。

webview.postUrl("www.testurl.com","data=dhfakjsdfhksdhf+dfasjkdhf+adsfkhasld");

传到后台解析:

key:data

value:dhfakjsdfhksdhf dfasjkdhf adsfkhasld

解决方案如下

try {

postData  = URLEncoder.encode(data.toString(),"utf-8");

} catch (UnsupportedEncodingException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

URLEncoder就对字符进行了比较好的处理了。

最后。。。。

webView.postUrl(“www.testurl.com”,("data="+postData).getBytes());

2 WebView高度显示不全或者无法滑出最底部

这个问题的根本原因是我们给出WebView控件的宽高和加载完页面之后页面实际的宽高有出入,这里让我感觉webview这个控件有点缺陷。没关系我们还是有办法解决。

还原场景的布局

给webview设置weight希望它自己控制高度

这里的在点击Webview内部链接时会用JS调用页面隐藏显示头布局和底部布局,设置weight希望webview自己控制高度.但是实际上会出现隐藏头尾的时候页面显示不全,或者回退显示头尾时,页面在最下面无法滑动出来(发现实际上webview的高度还是全屏,被底布局遮挡),马丹,这个问题困扰了我一天,实际解决却很简单,不多废话,说方案。

在页面加载完成之后重新按当前需求设置webview的高度。是不是很简单!其实只是我们不知道哪里出了问题而已。

3.Webview加载自签名的https网址问题

Https自定义证书引入问题(2)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,406评论 6 503
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,732评论 3 393
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,711评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,380评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,432评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,301评论 1 301
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,145评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,008评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,443评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,649评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,795评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,501评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,119评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,731评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,865评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,899评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,724评论 2 354

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,654评论 18 139
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,694评论 0 1
  • 一. Java基础部分.................................................
    wy_sure阅读 3,811评论 0 11
  • 一、关于青春的烦恼,没能趟过去的都是遗憾,趟过去的,那都不是事。 耿耿是一个中考开挂的女孩,因为中考的超常发挥来到...
    释然andy阅读 317评论 0 2
  • 转自:详解https是如何确保安全的? Https 介绍 什么是Https HTTPS(全称:Hypertext ...
    风化成石阅读 35,789评论 0 19