async function test1() {
uni.chooseImage({
sourceType:['camera'],
success(res) {
console.log(res)
},
fail(e) {
console.log(e)
}
})
}
async function test2() {
uni.chooseImage({
sourceType:['album'],
success(res) {
console.log(res)
},
fail(e) {
console.log(e)
}
})
}
1 个回复
Ask小助手 - Ask社区AI助手
好的,我们来从 DCloud 官方人员的视角,对这个 Bug 反馈进行一次评审。
问题评审
感谢您的反馈,这个问题的描述非常清晰,复现步骤和代码示例都很完整,让我们能迅速定位到问题的核心场景。这对于我们排查问题非常有帮助。
针对您反馈的内容,评审如下:
1. 反馈内容完整性分析
sourceType: ['camera']触发权限申请并拒绝后,再调用sourceType: ['album']会导致相册无法弹出的特定场景。这个操作路径非常关键,让我们能够理解这是一个因状态污染导致的 Bug,而非简单的 API 不可用。其他开发者遇到类似问题也能快速对号入座。test1和test2函数虽然简单,但恰好构成了可直接复现问题的核心代码,无需修改即可运行,这非常棒。提交 Bug 反馈时提供这样干净、剥离了业务逻辑的最小复现 Demo,对我们的排查工作帮助极大。2. Bug 成因与 API 行为分析
Bug 成立:经过分析,我们确认这是一个 Bug。
uni.chooseImage在 H5 端的表现依赖于浏览器的原生实现。在 HarmonyOS 4.2 自带浏览器的这个特定版本上,首次调用sourceType: ['camera']被用户拒绝后,浏览器内核可能错误地记录了权限状态,导致后续对文件选择器(<input type="file">)的任何调用都无法正常触发,这属于浏览器或系统 WebView 的兼容性问题。不过,我们仍然会尝试从框架层面看看能否做一些规避处理。关于 H5 端的
sourceType限制:借这个机会也想说明一下,根据官方 API 文档的兼容性说明,我们已经明确标注:sourceType值在 H5 平台根据浏览器的不同而表现不同,一般不可限制仅使用相册,部分浏览器也无法限制是否使用相机。 这意味着在 H5 端,uni.chooseImage最终是调用系统的文件选择器,我们能做的干预非常有限。这个 Bug 恰恰是这种不可控性的一个极端体现。您可以在文档中查看这个说明:uni.chooseImage 兼容性。3. 临时解决方案与替代方案
在修复发布前,您可以尝试以下方案来规避此问题:
方案一:避免在 H5 端调用相机(推荐)
既然 H5 环境下对相机/相册的控制力有限,一个更稳健的策略是直接在 H5 端只做通用的文件选择,不区分相机和相册。
方案二:使用更强大的文件选择组件
您可以考虑从插件市场寻找一个功能更完善的文件选择组件,这些组件可能封装了更健壮的错误处理和平台适配逻辑。例如,市面上的某些通用图片选择上传组件,内部就封装了对
uni.chooseImage的调用并处理了各种异常情况。您可以直接在官方插件市场搜索体验:https://ext.dcloud.net.cn/search我们已将这个 Bug 记录在案,并会针对 HarmonyOS 环境进行跟进与适配。感谢您为改善 uni-app 生态所做的贡献!
要回复问题请先登录或注册
公告
更多>相关问题