修复android下webView控件的总结

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

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

 

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

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

image 

不过开了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);就搞定了页面也能正常返回了

 

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

 

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

目录
相关文章
|
12天前
|
Java 程序员 开发工具
Android|修复阿里云播放器下载不回调的问题
虽然 GC 带来了很多便利,但在实际编码时,我们也需要注意对象的生命周期管理,该存活的存活,该释放的释放,避免因为 GC 导致的问题。
24 2
|
13天前
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
23 2
|
1月前
|
设计模式 Java Android开发
安卓应用开发中的内存泄漏检测与修复
【9月更文挑战第30天】在安卓应用开发过程中,内存泄漏是一个常见而又棘手的问题。它不仅会导致应用运行缓慢,还可能引发应用崩溃,严重影响用户体验。本文将深入探讨如何检测和修复内存泄漏,以提升应用性能和稳定性。我们将通过一个具体的代码示例,展示如何使用Android Studio的Memory Profiler工具来定位内存泄漏,并介绍几种常见的内存泄漏场景及其解决方案。无论你是初学者还是有经验的开发者,这篇文章都将为你提供实用的技巧和方法,帮助你打造更优质的安卓应用。
|
29天前
|
XML 存储 Java
浅谈Android的TextView控件
浅谈Android的TextView控件
21 0
|
2月前
|
XML 编解码 Android开发
安卓开发中的自定义视图控件
【9月更文挑战第14天】在安卓开发中,自定义视图控件是一种高级技巧,它可以让开发者根据项目需求创建出独特的用户界面元素。本文将通过一个简单示例,引导你了解如何在安卓项目中实现自定义视图控件,包括创建自定义控件类、处理绘制逻辑以及响应用户交互。无论你是初学者还是有经验的开发者,这篇文章都会为你提供有价值的见解和技巧。
43 3
|
3月前
|
前端开发 Android开发 开发者
安卓开发中的自定义视图:构建你的第一个控件
【8月更文挑战第26天】在安卓开发的浩瀚海洋中,自定义视图是一块充满魔力的乐土。它不仅是开发者展示创造力的舞台,更是实现独特用户体验的关键。本文将带你步入自定义视图的世界,从基础概念到实战应用,一步步教你如何打造自己的第一个控件。无论你是初学者还是有经验的开发者,这篇文章都将为你的开发之旅增添新的风景。
|
4月前
|
监控 Java Android开发
探究Android应用开发中的内存泄漏检测与修复
在移动应用的开发过程中,优化用户体验和提升性能是至关重要的。对于Android平台而言,内存泄漏是一个常见且棘手的问题,它可能导致应用运行缓慢甚至崩溃。本文将深入探讨如何有效识别和解决内存泄漏问题,通过具体案例分析,揭示内存泄漏的成因,并提出相应的检测工具和方法。我们还将讨论一些最佳实践,帮助开发者预防内存泄漏,确保应用稳定高效地运行。
|
5月前
|
安全 JavaScript 前端开发
kotlin开发安卓app,JetPack Compose框架,给webview新增一个按钮,点击刷新网页
在Kotlin中开发Android应用,使用Jetpack Compose框架时,可以通过添加一个按钮到TopAppBar来实现WebView页面的刷新功能。按钮位于右上角,点击后调用`webViewState?.reload()`来刷新网页内容。以下是代码摘要:
|
5月前
|
JavaScript 前端开发 Android开发
kotlin安卓在Jetpack Compose 框架下使用webview , 网页中的JavaScript代码如何与native交互
在Jetpack Compose中使用Kotlin创建Webview组件,设置JavaScript交互:`@Composable`函数`ComposableWebView`加载网页并启用JavaScript。通过`addJavascriptInterface`添加`WebAppInterface`类,允许JavaScript调用Android方法如播放音频。当页面加载完成时,执行`onWebViewReady`回调。
|
4月前
|
XML 数据格式
Android-自定义三角形评分控件
Android-自定义三角形评分控件
38 0