修复android下webView控件的总结
游戏中有一个收集玩家问题反馈的网页,很早之前就有同事反映说android在游戏无法上传附件,在浏览器中是可以正常使用的。最近能腾出手来的时候,就仔细看了一下这个问题,发现很里藏着不少问题,这里一一记录下来,希望能其它人有用,因为很多问题跟网上反映出来可能有点不太一样。
既然是网页,而且只在游戏中才出现,那第一步你要先会使用Fiddler来拦截请求,定位出问题的代码在哪里。你可以参考这篇文章,抓包已经讲的已经非常详细了,Step By Step Fiddler (四) 实现手机的抓包
在Fiddler中找到请求的网页链接,点击查看后将响应的文本使用文本工具(我是使用的EditPlus)保存,然后修改它,再用Fiddler的AutoResponder进行请求拦截,就能进行动态调试了
不过开了Fiddler中的HTTPS请求后,使用 Chrome访问HTTPS链接时都会提示此网站身份未认证,手机安装证书之后,我的设备就必须设定手势密码了,设置之后还不能取消手势必须先删除证书才能恢复以前的无手势访问。
而且开启了代理之后,360的SDK点击登录时提示“无法连接到网络,请检测您的手机网络设置”,其实是可以上网的,只是这个提示误导性比较强,先不使用代理登录SDK,进入游戏后再开启代理即可。
问题一:部分Android设备无法输入字母、数字,但是可以输入中文,返回按钮点击无效(网页不会后退)
网上很多,包括stackflow也会有很多结果,我试了很多,没有一个能解决我所遇到的问题,还有人说是一个bug,最后我是在一篇文章中猛然发现可能我目前使用的代码写的有问题(离职人员留下的),这篇文章链接在这里:
老的代码,红色标注的地方是直接返回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)页面变成空白了,居然空白了!!!
网上搜索了很多方法,也尝试了很多,结果都失败了,尝试的几种方案:
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控件的总结的更多相关文章
- Android的WebView控件载入网页显示速度慢的究极解决方案
Android的WebView控件载入网页显示速度慢的究极解决方案 [转载来源自http://hi.baidu.com/goldchocobo/] 秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国 ...
- 【转】Android的WebView控件载入网页显示速度慢的究极解决方案
秒(甚至更多)时间才会显示出来.研究了很久,搜遍了国外很多网站,也看过PhoneGap的代码,一直无解. 一般人堆WebView的加速,都是建议先用webView.getSettings().setB ...
- Android 使用WebView控件展示SVG图
1.添加布局界面代码: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xm ...
- android 调用webview控件,为逆向h5app做准备
activity对应layout文件加入: <WebView android:id="@+id/main_web" android:layout_width="ma ...
- Android下实现控件的叠加显示
<FrameLayout android:layout_width="fill_parent" android:layout_height="match_paren ...
- (转载)android控件之WebView控件缩小
android控件之WebView控件缩小 作者: 字体:[增加 减小] 类型:转载 时间:2013-05-16我要评论 发现这个控件挺好用,能自已控制进度条,而且这个控件的功能非常壮大,先上个简单的 ...
- Android中通过WebView控件实现与JavaScript方法相互调用的地图应用
在Android中通过WebView控件,可以实现要加载的页面与Android方法相互调用,我们要实现WebView中的addJavascriptInterface方法,这样html才能调用andro ...
- 安卓开发学习笔记(五):史上最简单且华丽地实现Android Stutio当中Webview控件https/http协议的方法
一.我们先在XML当中自定义一个webview(Second_layout.xml) 代码如下: <?xml version="1.0" encoding="utf ...
- Android学习笔记50:使用WebView控件浏览网页
在Android中,可以使用Webview控件来浏览网页.通过使用该控件,我们可以自制一个简单的浏览器,运行效果如图1所示. 图1 运行效果 1.WebView 在使用WebView控件时,首先需要在 ...
随机推荐
- java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)
-闭锁(Latch) 闭锁(Latch):一种同步方法,可以延迟线程的进度直到线程到达某个终点状态.通俗的讲就是,一个闭锁相当于一扇大门,在大门打开之前所有线程都被阻断,一旦大门打开所有线程都将通过, ...
- SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术]
SDC信息统计分析系统ETL工具的研究与实现[专业:计算机应用技术] http://www.docin.com/p-265530271.html
- bzoj5293: [Bjoi2018]求和
题目链接 bzoj5293: [Bjoi2018]求和 题解 暴力 对于lca为1的好坑啊.... 代码 #include<cmath> #include<cstdio> #i ...
- 【BZOJ】3751: [NOIP2014]解方程【秦九韶公式】【大整数取模技巧】
3751: [NOIP2014]解方程 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 4856 Solved: 983[Submit][Status ...
- 洛谷P1133 教主的花园
题目描述 教主有着一个环形的花园,他想在花园周围均匀地种上n棵树,但是教主花园的土壤很特别,每个位置适合种的树都不一样,一些树可能会因为不适合这个位置的土壤而损失观赏价值. 教主最喜欢3种树,这3种树 ...
- BZOJ 4610: [Wf2016]Ceiling Functi 水题
4610: [Wf2016]Ceiling Functi 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4610 Description ...
- Codeforces Round #312 (Div. 2) E. A Simple Task 线段树
E. A Simple Task 题目连接: http://www.codeforces.com/contest/558/problem/E Description This task is very ...
- Linux学习笔记02—磁盘分区
下面介绍四种最常见的分区方式: (1) 最简单的分区方案. SWAP分区:即交换分区,建议大小是物理内存的1-2倍. /分区:建议大小在6GB以上. 使用以上的分区方案,所有的数据都在/分区上, ...
- 解决Windows x86网易云音乐不能将音乐下载到SD卡的BUG
由于我个人最常用的电脑是Surface pro4 256G版本,装了不少生产力空间还挺吃紧的,音乐之类的必然都存单独的SD卡里.用UWP版本的网易云音乐倒是没问题,最近问题来了,UWP版本的网易云音乐 ...
- Upsync:微博开源基于Nginx容器动态流量管理方案
Upsync:微博开源基于Nginx容器动态流量管理方案 https://mp.weixin.qq.com/s?__biz=MzAwMDU1MTE1OQ==&mid=404151075& ...