Android WebView 重定向问题的小研究
来源:互联网 发布:协同过滤推荐php 编辑:程序博客网 时间:2024/06/05 06:12
最近在工作中,遇到了一些webview嵌套其他第三方的html的页面的问题[非本团队开发html]的问题。本人项目,其中头部的返回为原生层自己控制,配置地址为后台配置。项目为html+原生类型。
出现问题的情况:
当我们的webView嵌套比如应用宝的时候,当我们点击告诉下载,则发生地址无法识别的问题,这时候IOS的亲说这是第三方重定向的问题,顾本人查找了一些相关信息,但是发现和他的理解有一些偏差,下面是本人的理解,纯属个人简介,如果亲们有不同的看法,可以留言,或者私聊本人,qq:2836093218(cherrychen).
下面是以春播为例子:
下面是出现问题的截图:
下面是本人参考了别人的博客,copy下来的代码,并加入到自己的项目中:
代码如下:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { WebView.HitTestResult hitTestResult = view.getHitTestResult(); int hitType = hitTestResult.getType(); if (hitType != WebView.HitTestResult.UNKNOWN_TYPE) { Logs.e("WebViewManger","没有进行重定向操作"); //这里执行自定义的操作 //return true; } else{ Logs.e("WebViewManger","进行了重定向操作"); //重定向时hitType为0 ,执行默认的操作 //return false; } try { Logs.e("WebViewManger","shouldOverrideUrlLoading url:"+url); view.requestFocus(); view.loadUrl(url); webView.setVisibility(View.VISIBLE); error_rela_layout.setVisibility(View.GONE); } catch (Exception e) { } return true; }
下面是代码运行结果
[1]点击普通下载得到的日志:
10-30 10:06:07.843 22695-22695/com.reach.doooly E/WebViewManger: 进行了重定向操作10-30 10:06:07.843 22695-22695/com.reach.doooly E/WebViewManger: shouldOverrideUrlLoading url:http://wxz.myapp.com/16891/9AB3CA1FEA2518D7949ADB8C0A0CDA32.apk?fsname=com.chunbo.chunbomall_3.4.2_53.apk&hsr=4d5s
[2]点击安全下载得到的日志:
10-30 10:08:20.183 22695-22695/com.reach.doooly E/WebViewManger: 进行了重定向操作10-30 10:08:20.183 22695-22695/com.reach.doooly E/WebViewManger: shouldOverrideUrlLoading url:tmast://appdetails?r=0.01669793288410526&pname=com.chunbo.chunbomall&oplist=1%3B2&via=ANDROIDWXZ.YYB.OTHERBROWSER&downl_biz_id=991653&appid=12010540&outerCallTime=1509329300027&outerCallType=1&outerCallMode=1
问题与解决方案:
我们常遇到的嵌入html下载的问题分三类,当然也只是本人现在app开发遇到的情况,亲们如果有其他看法,可以留言或者私聊本人哈。
[1]后台配置url为不可识别地址,如上图的应用宝安全下载页面,android webview无法识别
[2]后台配置url为https://…..name.apk or http://….name.apk 这样,android webview可以识别地址
[3]后台配置url为包含apk文件的落地页,webview会先打开落地页,然后在识别下载apk地址。这样android webview会直接变成空白
下面是本人这次在开发中遇到上面的问题的一些小决绝办法,并不是很perfect,亲们如果有更好的办法可以留言欧。
[1]针对第一种情况,我们可以判断错误的返回码,然后进行操作,可以直接返回前一步等。或者翻译这种特殊定义,并实现相关下载功能,
[2]第二种完全不需要解决
[3]第三种,可以实现下载的同时让webview进行返回
[4]如果[2]和[3]同时存在就比较头疼了,应为完全不知道上一个是什么,当然可以进行标记,但是这样太麻烦,本人并不喜欢,这就要求后端配置的时候一定要注意欧。
下面付贴,如果实现处理检测到下载文件,实现下载:[如果不处理,webview只是点击之后没有效果欧]
webView.setDownloadListener(downloadListener); /*** * 下载页面监听加入 */ private DownloadListener downloadListener = new DownloadListener() { @Override public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { if (!StringUtlis.isEmpty(url)) { Uri uri = Uri.parse(url); Intent intent = new Intent(Intent.ACTION_VIEW, uri); context.startActivity(intent); if(webView.canGoBack()){ webView.goBack(); } } } };
Android WebView 重定向问题的小研究的小结论:
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) { WebView.HitTestResult hitTestResult = view.getHitTestResult(); int hitType = hitTestResult.getType(); if (hitType != WebView.HitTestResult.UNKNOWN_TYPE) { Logs.e("WebViewManger","没有进行重定向操作"); //这里执行自定义的操作 //return true; } else{ Logs.e("WebViewManger","进行了重定向操作"); //重定向时hitType为0 ,执行默认的操作 //return false; } try { Logs.e("WebViewManger","shouldOverrideUrlLoading url:"+url); view.requestFocus(); view.loadUrl(url); webView.setVisibility(View.VISIBLE); error_rela_layout.setVisibility(View.GONE); } catch (Exception e) { } return true; }
通过上面的代码,判断webview重定向,这里的重定向指的是,webview加载的url和前面一个url不同,并不能够达到,加载地址和
on10-30 10:24:37.413 22695-22695/com.reach.doooly E/WebViewManger: 进行了重定向操作10-30 10:24:37.413 22695-22695/com.reach.doooly E/WebViewManger: shouldOverrideUrlLoading url:tmast://appdetails?r=0.24434838060465447&pname=com.chunbo.chunbomall&oplist=1%3B2&via=ANDROIDWXZ.YYB.OTHERBROWSER&downl_biz_id=991653&appid=12010540&outerCallTime=1509330277298&outerCallType=1&outerCallMode=1
类似这样的情况分开。顾使用如上重定向代码的时候,特别需要判定当前的情况是否能够通过该方法达到效果。
希望本篇文章对亲有用,如果您对本篇博客有不同的看法,或者对运行效果有质疑,亲可以直接私信本人欧。
阅读全文
0 0
- Android WebView 重定向问题的小研究
- Android WebView重定向问题的解决方案
- Android WebView页面重定向问题
- Android WebView重定向GOBACK问题
- WebView重定向问题的解决方案
- WebView重定向问题的解决方案
- Android WebView 因重定向无法正常goBack()的一种解决小方案
- android webView 解决重定向
- Android 解决WebView重定向
- android webview 如何去广告和如何解决重定向返回的问题。
- android webview 如何去广告和如何解决重定向返回的问题。
- WebView重定向的解决方案
- android webview 解决回退重定向的问题
- shouldOverrideUrlLoading()重定向,无法返回跳出WebView的问题
- WebView 重定向行为导致的多次加载问题
- 解决Android Webview 重定向无法 goback 的方法
- Android进阶---Android Webview重定向问题解决
- Android WebView 内处理302重定向
- php 三元操作符的简化使用 (中间省略一项)
- ascii码简单记录
- Redis
- 最近在排查一个core问题,对dmesg的时间戳,做了一个转化工具
- Java多线程编程-(17)-多线程异步调用之Future模式
- Android WebView 重定向问题的小研究
- springBootDemo入门
- 公司项目中controller代码的一些编写习惯
- JAVA8 HashMap 的原理--个人
- iOS 打包过程中问题拾遗
- 支付宝 微信支付
- java程序获取系统资源--sigar的使用
- 自定义分页加载
- slam的初步学习(二)--PCL点云库的安装