uni-app ios13.3.1、ios14.6手机safari浏览器中uni.chooseImage不生效
uni-app ios13.3.1、ios14.6手机safari浏览器中uni.chooseImage不生效
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| HBuilderX | 3.2.2 | 离线 |
操作步骤:
uni.chooseImage({
count: maxNum - filePaths.length,
extension: extension,
sizeType: ['compressed'], //限制只传压缩图,保证小于10Mb
success: res => {
},
fail: res => {
console.log('choose Image err:' + res)
}
})
预期结果:
- 使用相册或相机,
实际结果:
- 无任何反应, 无报错
bug描述:
调用uni.chooseImage选择图片钩子不生效,毫无反应,控制台没报错,同样的代码在Android下正常运行。
uni.chooseImage({
count: maxNum - filePaths.length,
extension: extension,
sizeType: ['compressed'], //限制只传压缩图,保证小于10Mb
success: res => {
},
fail: res => {
console.log('choose Image err:' + res)
}
})
更多关于uni-app ios13.3.1、ios14.6手机safari浏览器中uni.chooseImage不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
使用不同版本的 uni-app 测试表现是否相同?
另外 Safari 浏览器中表现是否正常?
更多关于uni-app ios13.3.1、ios14.6手机safari浏览器中uni.chooseImage不生效的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前是在3.2.2,3.2.3版本使用过, 都是一样的, ios的safari种没反应,
回复 橘子桔子: 检查一下你的 extension
回复 DCloud_UNI_GSQ: 搞明白了,不是参数的问题, 我们项目需求,每个用户有资源上传的数量限制,在上传之前查询一次是否还能上传。 我把方法写在App.vue里, 用了new Promise()返回值, 之后如果还能上传就会调用uni.chooseImage(). 在这样的流程下就会导致choose Image无反应。
当时如果把检测是否还有剩余资源写在当前页面, 不用Promise就没问题。
应该算是个bug了,只会出现在ios的safari上的bug
回复 橘子桔子: 苹果要求选择文件由用户直接触发(异步不可以),后续会分析一下这种情况能否判断出并触发失败。
回复 DCloud_UNI_GSQ: 并非异步打开choose Image的。 调用的基本代码结构如下。 // app.vue async checkData(){ new Promise() } // page async MainFn(){ await getApp().checkData(): await getApp().choosePhoto(); }
回复 橘子桔子: 翻译一下 async 是什么意思
回复 DCloud_UNI_GSQ: 哈哈哈哈哈哈
根据你的描述,这是一个典型的iOS Safari浏览器权限问题。在iOS 13+的Safari中,uni.chooseImage(底层调用的是<input type="file">)必须在用户交互的直接响应中触发,否则会被浏览器安全策略拦截。
核心原因:iOS Safari对文件选择器的调用有严格的用户手势要求。如果你的uni.chooseImage调用被包裹在异步回调、定时器或非直接触发的逻辑中,它就会静默失败。
解决方案:
-
确保直接绑定到用户操作: 将
uni.chooseImage直接绑定到按钮的[@tap](/user/tap)事件,避免在setTimeout、Promise.then或异步请求回调中调用。// ✅ 正确示例 <button [@tap](/user/tap)="chooseImage">选择图片</button> methods: { chooseImage() { uni.chooseImage({ count: 1, success: (res) => { console.log(res.tempFilePaths); } }); } }

