游戏中有一个收集玩家问题反馈的网页,很早之前就有同事反映说android在游戏无法上传附件,在浏览器中是可以正常使用的。最近能腾出手来的时候,就仔细看了一下这个问题,发现很里藏着不少问题,这里一一记录下来,希望能其它人有用,因为很多问题跟网上反映出来可能有点不太一样。

 

既然是网页,而且只在游戏中才出现,那第一步你要先会使用Fiddler来拦截请求,定位出问题的代码在哪里。你可以参考这篇文章,抓包已经讲的已经非常详细了,Step By Step  Fiddler (四) 实现手机的抓包

在Fiddler中找到请求的网页链接,点击查看后将响应的文本使用文本工具(我是使用的EditPlus)保存,然后修改它,再用Fiddler的AutoResponder进行请求拦截,就能进行动态调试了

 

不过开了Fiddler中的HTTPS请求后,使用 Chrome访问HTTPS链接时都会提示此网站身份未认证,手机安装证书之后,我的设备就必须设定手势密码了,设置之后还不能取消手势必须先删除证书才能恢复以前的无手势访问。

而且开启了代理之后,360的SDK点击登录时提示“无法连接到网络,请检测您的手机网络设置”,其实是可以上网的,只是这个提示误导性比较强,先不使用代理登录SDK,进入游戏后再开启代理即可。

 

 

问题一:部分Android设备无法输入字母、数字,但是可以输入中文,返回按钮点击无效(网页不会后退)

网上很多,包括stackflow也会有很多结果,我试了很多,没有一个能解决我所遇到的问题,还有人说是一个bug,最后我是在一篇文章中猛然发现可能我目前使用的代码写的有问题(离职人员留下的),这篇文章链接在这里:

android开发中WebView的使用(附完整程序)

老的代码,红色标注的地方是直接返回true,改成super.onKeyDown(keyCode, event)就正常了

 

问题二:Android设备点击网页的input[file]控件无效的问题

我是通过这篇文章找到解决方案的:Android WebView上传文件

搜索出来的答案,我记不得那个网址了,是在stackoverflow上的,但是它的那个参数有点问题,上面三个函数中好像有一个函数的参数它写的是“ValueCallback”没有后面的<Uri>,这个其实是有问题的,统一为ValueCallback<Uri> uploadMsg,只是它后面参数长度的问题

 

问题三:上传附件可能遇到失败的情况,上传成功时调用history.go(-1)不起作用

一个选择问题类型页面A,一个问题详情表单页B。通过webView的loadUrl方法调用时,传入的url有很多。比如:当前游戏的角色、服务器啊、游戏产品标识、设备mac等很长的一串信息,点击表单页B时,又多带上了一个type。

 

在页面B中,用户点击一个A元素的超链接(href=”javascript:history.go(-1);”)它能正常返回,但是在点击提交问题按钮之后,ajax接口成功后用js调用history.go(-1)页面变成空白了,居然空白了!!!

网上搜索了很多方法,也尝试了很多,结果都失败了,尝试的几种方案:

SmartPhone Web开发问题总结

Android : Detect history.back() in WebView

Why is javascript:history.go(-1); not working on mobile devices?

WebView back history without redirects

 

首先排除Java中设置的问题,因为JavaScript是起作用的,证明mWebView.getSettings().setJavaScriptEnabled(true);是生效了的。

 

然后我尝试直接本地修改代码,页面载入完成时调用history.go(-1)是能正常工作的。原本我尝试使用location.href = document.referrer,结果发现获取不到referrer,关于document.referrer可以参考这篇文章>>

然后我就在想要不要动态创建form表单,然后通过document.location.search.substr(1),获取参数列表,再将所有参数填写input中然后提交表单就页面跳转呢?但又要写一些代码,所以又想先再找找有没有其它办法…

 

之后我仔细查看了http的上传请求,尝试在ajax.ajaxFileUpload的success方法中延时调用history.go(-1),发现界面错位了。这时候我突然会不会提交表单时它里面动态创建了一个iframe导致调用history.go(-1)失效了呢?

文件上传ajaxFileUpload插件使用的是Content-Disposition来实现的,关于Content-Disposition的详情可以参数这篇文章:正确处理下载文件时HTTP头的编码问题(Content-Disposition)

源码我就没仔细看过了,然后我换了一种写法:history.go(1 - history.length);就搞定了,页面也能正常返回了

 

图片上传失败的问题,需要与后台一起联调,比较费时,也不是必定会遇到。也比较麻烦,所以暂时就搁置了,感觉是编码问题造成的,有待进一步确认…

 

希望以上三个问题能给遇到类似问题的人一些帮助吧,通过搜索来处理完全未知的问题时,确实需要细心和耐心,特别是在时间比较紧张的情况下,一定不能急躁,一躁思路就可能乱了

修复android下webView控件的总结的更多相关文章

  1. Android的WebView控件载入网页显示速度慢的究极解决方案

    Android的WebView控件载入网页显示速度慢的究极解决方案 [转载来源自http://hi.baidu.com/goldchocobo/] 秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国 ...

  2. 【转】Android的WebView控件载入网页显示速度慢的究极解决方案

    秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解. 一般人堆WebView的加速,都是建议先用webView.getSettings().setB ...

  3. Android 使用WebView控件展示SVG图

    1.添加布局界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...

  4. android 调用webview控件,为逆向h5app做准备

    activity对应layout文件加入: <WebView android:id="@+id/main_web" android:layout_width="ma ...

  5. Android下实现控件的叠加显示

    <FrameLayout android:layout_width="fill_parent" android:layout_height="match_paren ...

  6. (转载)android控件之WebView控件缩小

    android控件之WebView控件缩小 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-16我要评论 发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的 ...

  7. Android中通过WebView控件实现与JavaScript方法相互调用的地图应用

    在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...

  8. 安卓开发学习笔记(五):史上最简单且华丽地实现Android Stutio当中Webview控件https/http协议的方法

    一.我们先在XML当中自定义一个webview(Second_layout.xml) 代码如下: <?xml version="1.0" encoding="utf ...

  9. Android学习笔记50:使用WebView控件浏览网页

    在Android中,可以使用Webview控件来浏览网页.通过使用该控件,我们可以自制一个简单的浏览器,运行效果如图1所示. 图1 运行效果 1.WebView 在使用WebView控件时,首先需要在 ...

随机推荐

  1. [转] 实时监听input输入的变化(兼容主流浏览器)

    遇到如此需求,首先想到的是change事件,但用过change的都知道只有在input失去焦点时才会触发,并不能满足实时监测的需求,比如监测用户输入字符数. 在经过查阅一番资料后,欣慰的发现firef ...

  2. qString转char*

    char *vi_name = new char[vi_rsc_name.length()]; strcpy(vi_name,vi_rsc_name.toStdString().data()); de ...

  3. Serilog 记录日志

    Serilog 记录日志 Serilog是.net里面非常不错的记录日志的库,另外一个我认为比较好的Log库是NLog. 在我个人的asp.net web api 2 基础框架(Github地址)里, ...

  4. Python装饰器进阶

    装饰器进阶 现在,我们已经明白了装饰器的原理.接下来,我们还有很多事情需要搞清楚.比如:装饰带参数的函数.多个装饰器同时装饰一个函数.带参数的装饰器和类装饰器. 装饰带参数函数 def foo(fun ...

  5. app微信支付宝支付后台的插件模式+回调通过spring广播处理后续业务(已亲测可用)

    写在前面的话:每当我们做一个项目,基本上都会涉及到支付的业务,最常用的莫过于微信和支付宝的支付了,项目有bug,有问题,都不叫问题,可一旦钱出了问题,那就是大问题了,所以在支付业务上我们必须慎之又慎! ...

  6. 005.基于docker部署etcd集群部署

    一 环境准备 ntp配置:略 #建议配置ntp服务,保证时间一致性 etcd版本:v3.3.9 防火墙及SELinux:关闭防火墙和SELinux 名称 地址 主机名 备注 etcd1 172.24. ...

  7. android 进程间通信 messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯? android 消息机制 进程间 android 进程间 可以用 handler么 messenger 与 handler 机制 messenger 机制 是不是 就是 handler 机制 或 , 是不是就是 消息机制 android messenge

    韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha messenger 是什么 binder 跟 aidl 区别 intent 进程间 通讯 ...

  8. 图的遍历 之 深搜dfs

    DFS 遍历 深度优先搜索是一个递归过程,有回退过程. 对一个无向连通图,在访问图中某一起始顶点u 后,由u 出发,访问它的某一邻接顶点v1:再从v1 出发,访问与v1 邻接但还没有访问过的顶点v2: ...

  9. JAVA中的email正则表达式

    说到正则表达式,网上有很多的通用的表达式,可是事实上说来,一般人的都 不愿意去拿来研究,就是拿来就直接用就行了.可是,事实上,可能有些时候,项目中或公司里的实际情况不一样,得要修改一下正则表达式的,根 ...

  10. 2010-2011 ACM-ICPC, NEERC, Moscow Subregional Contest Problem K. KMC Attacks 交互题 暴力

    Problem K. KMC Attacks 题目连接: http://codeforces.com/gym/100714 Description Warrant VI is a remote pla ...