uni.scanCode({
scanType: ['qrCode'], // 只支持二维码
success: (res) => {
if (!res?.result) {
uni.showToast({ title: '扫描二维码失败', icon: 'none' });
return;
}
uni.showToast({ title: `扫描二维码成功:${ res.result }`, icon: 'none' });
},
}); - 发布:2026-09-14 09:30
- 更新:47 分钟前
- 阅读:47
产品分类: uniapp/App
PC开发环境操作系统: Mac
PC开发环境操作系统版本号: Mac 26.6.2
HBuilderX类型: 正式
HBuilderX版本号: 5.24
手机系统: iOS
手机系统版本号: iOS 18
手机厂商: 苹果
手机机型: iPhone11
页面类型: vue
vue版本: vue3
打包方式: 离线
项目创建方式: HBuilderX
示例代码:
操作步骤:
使用按钮点击事件调用uni.scanCode(方法
<template>
<button @tap="qrcode">扫码</button>
</template>
<script setup>
function qrcode() {
uni.scanCode({
scanType: ['qrCode'], // 只支持二维码
success: (res) => {
if (!res?.result) {
uni.showToast({ title: '扫描二维码失败', icon: 'none' });
return;
}
uni.showToast({ title: `扫描二维码成功:${ res.result }`, icon: 'none' });
},
});
}
</script>
使用按钮点击事件调用uni.scanCode(方法
<template>
<button @tap="qrcode">扫码</button>
</template>
<script setup>
function qrcode() {
uni.scanCode({
scanType: ['qrCode'], // 只支持二维码
success: (res) => {
if (!res?.result) {
uni.showToast({ title: '扫描二维码失败', icon: 'none' });
return;
}
uni.showToast({ title: `扫描二维码成功:${ res.result }`, icon: 'none' });
},
});
}
</script> 预期结果:
可以正常拍照,并得到二维码数据
可以正常拍照,并得到二维码数据
实际结果:
黑屏
黑屏
bug描述:
升级到最新的HBuilderX5.24正式版+离线打包SDK5.24后,重新打包,调用uni.scanCode后出现黑屏,在Xcode中报错。
使用HBuilderX5.05+离线打包SDK5.05就可以正常使用!!
<Weex>[error]WXMonitor.m:289, [WX_KEY_EXCEPTION_WXBRIDGE] exception: TypeError: this.$refs.barcode.cancel is not a function. (In 'this.$refs.barcode.cancel()', 'this.$refs.barcode.cancel' is undefined)
stack:cancel@file:///var/mobile/Containers/Data/Application/1510EF55-DE47-4114-8799-97E181EBF29F/Library/Pandora/apps/UNIAE0A4F4/www/uniappscan.js:32:5675
onUnload@file:///var/mobile/Containers/Data/Application/1510EF55-DE47-4114-8799-97E181EBF29F/Library/Pandora/apps/UNIAE0A4F4/www/uniappscan.js:32:5367
fn@weex-main-jsfm.js:7:2167
wn@weex-main-jsfm.js:7:2247
@weex-main-jsfm.js:7:24052
bo@weex-main-jsfm.js:8:1247
P@weex-main-jsfm.js:4:4111
@weex-main-jsfm.js:4:4639
fn@weex-main-jsfm.js:7:2167
wn@weex-main-jsfm.js:7:2247
@weex-main-jsfm.js:7:24052
qk@weex-main-jsfm.js:7:81469
nt@weex-main-jsfm.js:7:53295
we@weex-main-jsfm.js:7:52539
Ie@weex-main-jsfm.js:7:53903
unmount@weex-main-jsfm.js:7:33841
wv@weex-main-jsfm.js:4:6682
P1@weex-main-jsfm.js:31:235
@weex-main-jsfm.js:31:2882
欢迎到专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
感谢您的反馈。针对您提交的 Bug 报告,以下是基于官方视角的评审与分析意见:
1. Bug 反馈内容完整性评审
- BUG 描述:描述非常清晰。您明确指出了触发场景(升级至 HBuilderX5.24 正式版及对应离线 SDK 后重新打包)、核心现象(调用
uni.scanCode后黑屏)、以及具体的底层报错信息(this.$refs.barcode.cancel is not a function),并提供了对比信息(5.05 版本正常),这有助于官方快速定位问题。 - 代码示例:代码示例基本完整。但需要提醒您,示例代码中的模板字符串存在一处语法错误:
`扫描二维码成功:${.res.result }`中的.res应为res,建议修正为`${res.result}`,以免在运行测试时被其他报错干扰。 - 复现步骤:复现步骤描述清晰,结合您提供的代码示例,官方人员可以直接进行复现验证。
- 预期与实际结果:预期结果(正常拍照并得到数据)合理,实际结果(黑屏及抛出异常)符合报错日志描述,非误报。
- 分类信息:分类信息非常完整,包含了 HBuilderX 版本、手机 OS 平台及版本、Vue 版本、设备机型等关键信息。
- 附件说明:由于系统限制,我无法识别和查看附件内容,后续如有需要补充日志或截图,请直接以文本形式提供。
2. Bug 是否成立及分析
根据知识库中的相关信息,该 Bug 现象是成立的。
在 DCloud问答社区的相关反馈 中,有开发者遇到了完全一致的问题:在 iOS 环境下调用 uni.scanCode 时出现黑屏,并报出 this.$refs.barcode.cancel is not a function 错误。根据该问答记录,此问题通常与 iOS 端的相机权限处理有关,即使在系统设置中看到权限已开启,也可能因为权限状态同步或初始化时机问题导致底层扫码组件(Barcode)未能正确挂载,从而在执行 cancel 方法时抛出 undefined 异常。
建议的排查与替代方案:
- 权限前置判断与请求:建议在调用
uni.scanCode之前,主动通过代码检查并请求相机权限,确保权限状态完全就绪后再唤起扫码界面。您可以参考使用权限请求插件(如 App权限判断和提示插件)来规范处理权限逻辑。 - 尝试结束进程重置状态:如果是在开发调试过程中遇到黑屏,可以尝试将应用退到后台并结束进程,然后重新打开应用测试,这有助于清除因权限状态卡住导致的底层组件异常。
- 使用原生插件或 UTS 插件替代:由于
uni.scanCode在 App 端使用的是开源扫码引擎,识别效率和稳定性在某些复杂场景下可能存在局限。官方推荐使用性能更强的 UTS 扫码插件,您可以前往 插件市场搜索相关扫码插件 进行替代集成。
我们会持续关注该问题在后续版本中的表现,感谢您对 DCloud 产品的支持与反馈。