移動端 input[type=file]標簽 本地文件、拍照、錄像 上傳的兼容性問題: https://blog.csdn.net/sinat_35538827/article/details/85997205 或 https://blog.csdn.net/weixin_34101229/article/details/88696293
問題描述:移動端上傳文件,可以選擇 本地文件、拍照、錄像、錄音。但是他們不是同時可以選擇的,不同的手機還是有差異的。
一、input[type=file] 屬性:https://blog.csdn.net/sinat_35538827/article/details/85997205
三個屬性:
1、accept - 規定可提交的文件類型。
2、capture - 系統所捕獲的默認設備。camera(照相機),camcorder(攝像機),microphone(錄音)
3、mutiple - 支持多選。當支持多選時,multiple優先級高於capture。
二、不同環境中 input[type=file] 不同屬性對應的效果:(主要的運行環境:ios瀏覽器、ios微信網頁、安卓瀏覽器、安卓微信網頁)
1、<input type="file">
ios瀏覽器 | ios微信 | 安卓瀏覽器(左邊小米手機,右邊魅族手機) | 安卓微信 |
![]()
|
![]() (和ios瀏覽器上一樣的)
|
![]() ![]()
(不同是安卓系統,本身就有差異) |
小米手機:直接進入文件系統,沒有彈出選項 魅族手機:直接進入文件系統,沒有彈出選項 (兩者的行為是一樣的) |
2、<input type="file" capture="camera"> 【一般都是,直接調用對應的設備 進行獲取文件。也有手機會不一樣,類似下面的魅族手機】
ios瀏覽器 | ios微信 | 安卓瀏覽器 | 安卓微信 |
直接進入拍照或錄像的功能里 | 直接進入拍照或錄像的功能里 (和ios瀏覽器是一樣的) |
小米手機:直接進入拍照功能,但是不能錄像。 魅族手機:彈出選項,如下 |
小米手機:直接進入文件系統,沒有彈出選項 魅族手機:直接進入文件系統,沒有彈出選項 (兩者的行為是一樣的) |
3、<input type="file" accept="image/*">
ios瀏覽器 | ios微信 | 安卓瀏覽器(小米、魅族) | 安卓微信 |
![]() |
(和ios瀏覽器是一樣的) |
(兩者的行為是一致的) |
(兩者的行為是一致的)
|
4、<input type="file" accept="image/*" capture="camcorder">
accept 和 capture 兩者沖突,以accept為准
個人得出結論:
ios上基本表現一致,且根據屬性設置。可以實現定制,拍照和錄像 是 都有還是 選擇其一。
安卓機上就有很大差異,大部分的安卓機都是不能實現 彈出窗上同時有 拍照和錄像 功能的。 如果要實現 拍照和錄像功能都可以的話,彈出選擇的組件使用H5自己寫。選擇選項后,js對 input[type=file] 標簽的屬性修改。如,
點擊自定義的拍照選項后,直接跳到拍照功能(不彈出原生的選項組件)。
三、小程序中的H5的 input[type=file] 和 微信H5頁面的表現也是不一樣的。
安卓微信小程序中 要調用 拍照或錄像 必須設置 capture="camera" 屬性,且直接進入拍照或 錄像中。
ios微信小程序 | 安卓微信小程序 |
拍照錄像上傳文件可以正常定制 | 沒有選項彈出,要么直接到文件列表,要么只能拍照或錄像 |