背景
在H5上传文件业务开发过程中,上传功能需要让用户上传 图片/pdf 文件,我们很容易想到,只需要改变input的accept属性就好了,我们使用的accept属性如下。
<input accept="image/jpeg,image/jpg,image/png,application/pdf" type="file" />
但是在安卓真机Chrome上测试时,发生了一些问题。
可以看到,我们点击Choose File之后,出现了2个不应该出现的按钮,Camcorder 和 Recorder。
通过排查,我判断是Chrome自身的问题,那么如何为Chrome提issues呢?
在哪里为Chrome提Issues?
https://bugs.chromium.org/p/chromium/issues/list
可能这里有人会说,这不是chromium的bug区吗,并不是Chrome。
这里简单科普一下:
Chromium是谷歌的一个开源项目,所有的开发者们都可以去共同改进它。Chrome不是开源项目,谷歌会把Chromium的东西更新到Chrome中。所以Chromium更像是体验版,而Chrome是正式版。
提issues步骤
进入Issues页面
我们打开 https://bugs.chromium.org/p/chromium/issues/list 页面
填写机型环境信息
这里Chrome versions,网站会自动帮我们进行识别。由于是在PC上填写,我们需要填写自己的移动设备系统与版本。
选择issues类型
由于我们是开发者,直接选择Web developer
上述问题属于浏览器API的问题,我们选择 API
详细描述我们的问题
这里建议上传源代码,或者提供一个codesandbox。这里由于我的问题比较简单,我只上传了一个html页面。
为了让Chrome维护人员更好的复现bug,我上传了4张图片,也提供了在firefox的表现(在firefox上是正常的,没有bug)
为Chrome提issues的讲解到这里就结束啦,
以下为我提的issues链接,欢迎一起围观:
https://bugs.chromium.org/p/chromium/issues/detail?id=120435
以下为问题详细描述
上文具体Case分析
关于h5上传popup出现录音、摄像按钮的bug。
以下是我们的最简复现页面:
点击第一行的<input id="1" accept="image/jpeg,image/jpg,image/png" type="file" />按钮
可以看到Chrome的表现是正常的
点击第二行的<input accept="image/jpeg,image/jpg,image/png,application/pdf" type="file" />按钮
可以看到弹出了4个按钮,但是多出了Camcorder和Recoder,这就不正常了,我们并没有在accept中声明要求用户上传这2种格式的文件
那么在Firefox的表现呢?点击第二行的按钮,可以看到Everything is fine。。所以我们可以确定该bug为Chrome自身的问题。
如何自行兼容?
在input的onChange回调中根据files进行自行判断,如果用户上传的类型不对,就舍弃掉该文件,给用户tips提示。
以下为我提的issues
欢迎大家一起围观:
https://bugs.chromium.org/p/chromium/issues/detail?id=1204359