背景
在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