Android WebView 重定向问题的小研究
2017-10-30 10:27
633 查看
最近在工作中,遇到了一些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
类似这样的情况分开。顾使用如上重定向代码的时候,特别需要判定当前的情况是否能够通过该方法达到效果。
希望本篇文章对亲有用,如果您对本篇博客有不同的看法,或者对运行效果有质疑,亲可以直接私信本人欧。
相关文章推荐
- android webview重定向 返回按钮死循环问题修改
- Android中WebView加载Url时出现域名连接重定向时返回控制死循环的问题
- android webview 如何去广告和如何解决重定向返回的问题。
- android webView 每次开启一个新的页面(重定向问题)
- Android WebView重定向问题的解决方案
- Android进阶---Android Webview重定向问题解决
- Android WebView 重定向问题
- Android Webview重定向问题解决方法
- Android WebView重定向GOBACK问题
- android webview 解决回退重定向的问题
- Android WebView页面重定向问题
- android webview 解决回退重定向的问题
- android webview 如何去广告和如何解决重定向返回的问题。
- android——webview拦截跳转指定url后,点击返回界面重定向的问题
- Android的HttpClient和WebView session不同的问题
- 【Android】webView 使用 系统自带搜索对话框问题
- Android自定义View研究(六)--View中的原点坐标相关问题
- 如何解决Android WebView出现的乱码问题
- Android自定义View研究(七)--XML中布局自定义View时View触摸原点问题
- Android利用WebView开发browser中flash无法播放的问题