uni-app iOS平台 uni.chooseImage 报错:webviewReady[7][6] not match __ERROR
uni-app iOS平台 uni.chooseImage 报错:webviewReady[7][6] not match __ERROR
类别 | 信息 |
---|---|
产品分类 | uniapp/App |
PC开发环境 | Mac |
PC操作系统版本 | macOS Ventura 13.2.1 |
HBuilderX类型 | 正式 |
HBuilderX版本 | 3.98 |
手机系统 | iOS |
手机系统版本 | iOS 16 |
手机厂商 | 苹果 |
手机机型 | iPhone11 16.1.1 |
页面类型 | vue |
vue版本 | vue2 |
打包方式 | 离线 |
项目创建方式 | HBuilderX |
操作步骤:
调用uni.chooseImage 拍照或从相册选择照片,拍照确定或从相册选中照片确定返回后,页面会白屏并重新加载
uni.chooseImage 传入参数只有sourceType和count为1
预期结果:
拍照返回后页面不应白屏并重新加载
实际结果:
拍照返回后页面会白屏并重新加载
bug描述:
iOS 真机iPhone11 16.1.1 uni.chooseImage 拍照或从相册选择照片 控制台报错:webviewReady[7][6] not match __ERROR,相机拍照确定后返回,页面会白屏并重新加载(高概率出现)
sourceType 是个Array https://uniapp.dcloud.net.cn/api/media/image.html#chooseimage
感谢您的回复,我描述的不严谨,uni.chooseImage 传入参数只有sourceType为[‘camera’,‘album’]和count为1
而且这种情况只在iphone 11 16.1.1上出现,在安卓和iOS其它机型都正常
解决了吗?我也遇到相同的问题
解决了吗?同样遇到这个问题
在使用 uni-app 开发 iOS 应用时,如果你在调用 uni.chooseImage
方法时遇到 webviewReady[7][6] not match __ERROR
的错误,这通常是由于 WebView 的通信机制出现问题导致的。以下是一些可能的解决方案:
1. 检查 HBuilderX 版本
确保你使用的是最新版本的 HBuilderX。旧版本可能存在一些已知的 bug,更新到最新版本可能会解决这个问题。
2. 检查 manifest.json 配置
在 manifest.json
文件中,确保你已经正确配置了 iOS 平台的相关设置。特别是 app-plus
节点下的 ios
配置。
{
"app-plus": {
"ios": {
"webview": {
"ready": true
}
}
}
}
3. 检查 WebView 的初始化
确保 WebView 已经正确初始化。你可以在 onLoad
或 onReady
生命周期钩子中调用 uni.chooseImage
方法,以确保 WebView 已经准备好。
onReady() {
uni.chooseImage({
count: 1,
success: (res) => {
console.log(res.tempFilePaths);
},
fail: (err) => {
console.error(err);
}
});
}
4. 检查权限
确保你的应用已经获取了访问相册的权限。你可以在 manifest.json
中配置权限:
{
"app-plus": {
"distribute": {
"ios": {
"permissions": {
"PHPhotoLibrary": {
"description": "需要访问相册以选择图片"
}
}
}
}
}
}
5. 检查网络请求
如果你在调用 uni.chooseImage
时涉及到网络请求,确保网络请求已经正确配置,并且没有跨域问题。
6. 调试和日志
在开发过程中,可以使用 console.log
或 uni.showToast
来输出调试信息,帮助你定位问题。
7. 重新编译和运行
有时候,重新编译和运行项目可以解决一些临时性的问题。你可以尝试清理项目并重新编译。
8. 检查插件和依赖
如果你使用了第三方插件或依赖,确保它们与当前版本的 uni-app 兼容。
9. 联系官方支持
如果以上方法都无法解决问题,建议联系 uni-app 官方支持或在社区中寻求帮助。
示例代码
以下是一个简单的示例代码,展示如何在 onReady
生命周期钩子中调用 uni.chooseImage
:
export default {
onReady() {
uni.chooseImage({
count: 1,
success: (res) => {
console.log(res.tempFilePaths);
},
fail: (err) => {
console.error(err);
}
});
}
}