uni.chooseFile({
success(res) {
console.log(res);
},
fail(err) {
console.log(err);
}
})
- 发布:2021-12-13 15:31
- 更新:2021-12-27 13:49
- 阅读:1200
产品分类: uniapp/H5
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 3.2.16
浏览器平台: Chrome
浏览器版本: 所有浏览器所有版本
项目创建方式: HBuilderX
示例代码:
操作步骤:
uni.chooseFile({
success(res) {
console.log(res);
},
fail(err) {
console.log(err);
}
})
正常调用
uni.chooseFile({
success(res) {
console.log(res);
},
fail(err) {
console.log(err);
}
})
正常调用
预期结果:
能够正常选择或录制
能够正常选择或录制
实际结果:
报错 { errMsg: "chooseFile:fail 文件选择器对话框只能在用户激活时显示" }
报错 { errMsg: "chooseFile:fail 文件选择器对话框只能在用户激活时显示" }
bug描述:
所有浏览器所有版本
chooseVideo、chooseImage、chooseFile
uni.chooseFile({
success(res) {
console.log(res);
},
fail(err) {
console.log(err);
}
})
都会返回以下错误信息,导致应用无法使用
{ errMsg: "chooseFile:fail 文件选择器对话框只能在用户激活时显示" }
把uni.chooseFile放到mouseup的回调函数中调用,这样可以绕过uni内部检测机制,可以异步调用chooseVideo、chooseImage、chooseFile。
只在HBuilderX 3.2.16中进行了测试。因为项目中目前只能在异步回调中调用chooseImage这些接口,如果要改造成同步调用,改造起来比较麻烦,所以使用了下面的代码workaround了一下。
invoke(func) {
const mock = new MouseEvent('mouseup')
const callback = ()=>{
func()
document.removeEventListener('mouseup', callback )
}
document.addEventListener('mouseup', callback )
document.dispatchEvent(mock)
},
chooseFile(success, fail) {
this.invoke(()=>{
uni.chooseFile({
success,
fail
})
})
},
蛋炒太阳 (作者)
我的有问题,我切换版本都不行,手机上,windows上都有问题
2021-12-13 15:46
蛋炒太阳 (作者)
3.2.16 和 3.2.15都不行
2021-12-13 15:47
2***@qq.com
回复 蛋炒太阳: 之前可以用吗?
2021-12-13 15:51