Android webview上传取消无响应

android的webview绝对是最考验开发的耐心的,webview很多版本都不一样,尤其是4.4升级内核之后,很多的api都有了变化或者失效,其中,上传文件这个api最为让人痛苦。

原生webview是支持上传文件的。但是众多版本的迭代扩展,api参数也不一样。一般拿到上传文件的需求时,大家都会照搬android brower的代码(聪明),api如下:

        // js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
        // Android > 4.1.1 调用这个方法
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType, String capture) {
            LogUtils.d("openFileChooser 4.1.1 = ");
        }

        // 3.0 + 调用这个方法
        public void openFileChooser(ValueCallback<Uri> uploadMsg, String acceptType) {
            LogUtils.d("openFileChooser 3.0 = ");
        }

        // Android < 3.0 调用这个方法
        public void openFileChooser(ValueCallback<Uri> uploadMsg) {
            LogUtils.d("openFileChooser < 3.0 = ");
        }

很明显的api升级痕迹,但是你以为这样就行了么,试过众多手机之后,你发现,4.4.0到4.4.2的系统无法调用这个api,当然也无从上传文件了,是怎么回事?
原来google在4.4更改webkit内核为chromium之后,把这个api删除了!删除了,是的,你没看错,没有@deprecated!!!一般升级api,都会保留对原有api的支持,@deprecated掉旧的api,加入新的api,但是google却2个都没做,开发团队解释,我们正在开发一个新的共有的api,这个api会更好,我们会在正式版本上推出。结果呢,恩,他竟然没说错,是的,在4.4.3版本,他又把这个api加回来了,oh my god,有木有一种吐血的冲动~
当然,超级app微信的做法一般会得到大家的关注,微信前端人员这样解释微信的做法:
http://www.qianduan.net/wei-xin-bu-zhi-chi-webview-nei-wen-jian-shang-chuan-liao-no.html
(仅引用,不保证正确性)
4.4.0-4.4.2系统不支持,微信也不支持
但是也有人说,微信5.2版本以后,是支持的,对此又有人如此解释:微信初始化的时候,如果用户安装了QQ浏览器的话,那么微信用的是QQ的chromium内核的webview,否则调用原生webview。原生的webview是受限于系统的,微信也没办法。QQ浏览器webview支持上传,所以不受限与系统。若用户无法上传,安装QQ浏览器重启微信即可。
OK,这个api就讲到这儿了,下面是遇到的问题:
调用系统app选择文件的时候,若弹出选择框,cancel掉选择框之后,发现webview无响应了,无法刷新,加载,点击,甚至退出这个activity也无法加载!后果很严重~
原因是当你选择上传文件的时候,webview的ValueCallback对象(就是选择图片的回调)会持有这个webview,在没有收到回调之前,你无法对这个webview做任何的操作!
知道原因之后,就很好解决了,如果cancel了,那么直接调用该对象的onReceiveValue()方法,传入null即可,webview就可以正常操作了
忙活了一整天,终于是弄清了原因,搞定了,但是,希望总是在前方滴,同志们,也不要灰心,谁说以后就不能和andorid的webview好好玩耍了,棒棒糖不是来了嘛
andorid 5.0之后,webview会成为可升级控件,google play会推送更新的哟,这样的话兼容性稳定性应该能得到很大的提升,So
各位rom大神们和国产厂商们,阉割google play的时候,要保证webview的可更新哟~

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lindir

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值