微信拍照时页面会被刷新的BUG

米阳 2021-10-18 472 10/18

问题背景

最近开发公司的公众号项目时遇到了很头疼的问题,公司是要做图片上传并且ocr识别证件内容的功能,但是上传照片时偶尔页面会被刷新或者说时重新加载,这会让原本识别了正面的的信息消失。

问题分析定位

1、看表象就是微信拍照后出现了刷新,会不会是图片太大,导致wx.getLocalImgData获取本地图片时崩溃了,找了一张10M左右的图片试了,只是没回显到图片(就是没读取),但是页面并没有刷新。

2、不是图片问题那就看看是不是代码逻辑问题,代码还是用的微信API,wx.chooseImage大致用法如下

wx.chooseImage({
    count:1,
    sizeType:['compressed'],
    sourceType:['camera'],
    success:(res)=>{
        alert('成功')
    },
    error:(error)=>{
        alert('失败')
    }
})

出下面刷新时也是弹出了成功的,然后调了相机拍照,回来之后就刷新了.....,现在问题是没法捕获到错误。

3、既然没法确定是不是wx.chooseImage的问题那就用排除法,不用API直接用vant的上传组件van-uploader,换了之后还是会出现拍照之后相机关闭刷新页面的情况。

总结:

用了以上一些尝试基本排除了代码性能导致内存溢出页面崩溃、微信api的bug,基本也就是浏览器的问题了。现在如果还深入探究可能不太现实了,可能涉及更底层的东西了,能力之外了,而且再去花时间去搞这个有点得不偿失了,还有其他开发任务,现在主要是看怎么解决主要问题就是不要让用户拍第二张照片后把之前的识别信息删掉

问题出现的真正原因

1、在浏览器上调用文件上传时,Android系统会把进程从浏览器切换到文件选择器(根据用户选择是进入图片选择器还是系统摄像头,或者其他的进程),这时浏览器已经变为后台进程。

2、Android操作系统的设计缺陷,这时浏览器进程六农村优先级与其他的后台进程是一样的,因此如果操作系统认为内存不足需要进行清理,因为浏览器占用内存一般都比较大,所以很容易被kill掉。

3、当当用户选好图片返回浏览器时浏览器进程已经不在了,按照安卓的机制,浏览器进程将进行恢复,但是恢复到什么状态时由浏览器来决定的,而浏览器无法恢复到之前的状态。所以最后就是我们看到bug的样子。

解决

其实也不算真正解决了问题,俗话说的好如果解决不了那就解决提出问题的人,去找产品......,讨论过后为了避免这种情况,就把原本证件正反面上传识别在一个页面就拆成了两个页面,分成两步,这样大概率上是避免了因为重定向把页面信息刷没的情况。

 

 

 

 

- THE END -

米阳

10月24日11:17

最后修改:2024年10月24日
0