时间:2024-11-18 17:23
人气:
作者:admin
<!-- 在 'manifest.json' 中允许打开摄像头权限 -->
<template>
<button @click="scanQRcodes">扫码</button>
</template>
<script setup>
// 扫码
const scanQRcodes = () => {
uni.scanCode({
success: (res) => {
if (res.result) {
console.log('扫描结果:', res.result);
} else {
uni.showToast({
title: '扫描失败',
icon: 'none'
});
}
},
fail: (err) => {
if (err.errMsg.includes('cancel')) {
uni.showToast({
title: '扫描已取消',
icon: 'none'
});
} else {
uni.showToast({
title: '调用相机失败',
icon: 'none'
});
}
}
});
};
</script>
导入插件(两种方式,选其一)
(1)HBuilder 创建的项目:从应用市场导入 mumu-getQrcode 到uniapp项目中
(2)脚手架创建的 uni 项目:需要自行安装 jsQR 依赖,并且修改组件中源码中的引入。
# 安装 jsQR
npm install jsqr --save
# 修改组件源码对 jsQR 依赖
import jsQR from "jsqr"
新建页面 scan-qrcode,作为扫码页面。
<template>
<view class="container">
<mumu-get-qrcode @success='qrcodeSucess' @error="qrcodeError"></mumu-get-qrcode>
</view>
</template>
<script>
import mumuGetQrcode from '@/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue'
export default {
components: {
mumuGetQrcode //注册
},
data() {
return {
}
},
name: 'Qrcode',
methods: {
qrcodeSucess(data) { //扫码成功
console.log(data)
// 确认弹窗(若不需要可以去除)
uni.showModal({
title: '成功',
content: data,
success: () => { // 确认弹窗后的操作 }
})
},
qrcodeError(err) { //扫码失败
uni.showModal({
title: '摄像头授权失败',
content: '摄像头授权失败,请检测当前浏览器是否有摄像头权限。',
success: () => {
uni.navigateBack({}) //返回到上一页
}
})
}
}
};
</script>
在需要调用扫码功能的页面进行 页面跳转
uni.navigateTo({
url: '/pages/scan-qrcode/scan-qrcode'
});
相关API
| 参数 | 说明 | 类型 | 默认值 |
|---|---|---|---|
| continue | 是否连续获取。false 监听一次 true 持续监听 | Boolean | false |
| exact | 选调用摄像头。environment 后摄像头 user 前摄像头 | String | environment |
| size | 扫码屏幕大小。whole 全屏 balf 半屏 | String | whole |
| definition | 调用摄像头清晰度。fasle 正常 true 高清 | Boolean | false |
| 事件名 | 说明 | 回调参数 |
|---|---|---|
| success | 检测到图中有二维码并读取到数据是回调 | 二维码数据 |
| error | 组件内部发送错误,通常是摄像头没有调用成功 | 错误信息,详情见下 |
常见的错误信息:
AbortError[中止错误]
尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出NotReadableError异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。
NotAllowedError[拒绝错误]
用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。
NotFoundError[找不到错误]
找不到满足请求参数的媒体类型。
NotReadableError[无法读取错误]
尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。
OverconstrainedError[无法满足要求错误]
指定的要求无法被设备满足,此异常是一个类型为OverconstrainedError的对象,拥有一个constraint属性,这个属性包含了当前无法被满足的constraint对象,还拥有一个message属性,包含了阅读友好的字符串用来说明情况。
SecurityError[安全错误]
在getUserMedia() 被调用的 Document 上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。
TypeError[类型错误]
constraints 对象未设置[空],或者都被设置为false。
| 插槽名称 | 说明 | 默认值 |
|---|---|---|
| error | 当发送错误时,在页面上显示的内容 | 相机权限被拒绝提示 |