更新记录
1.3.0(2022-06-28) 下载此版本
- [修改] - 之前使用 canvas 在页面上展示画面,改为 video 标签在页面展示视频流画面。
- [增强] - 现在只获取扫描框中的画面进行二维码识别,这样可有效的节省资源与提高识别效率。
- [增强] - 提升调用摄像头的分辨率。
- [增强] - 提升识别大二维码的能力,之前在低端机上识别大二维码容易识别不到。
- [新增] - 新增错误事件返回,返回内部报错。错误说明请查看文档。
1.2.1(2022-06-01) 下载此版本
新增闪光灯开关(只有在谷歌内核浏览器中显示,推荐微信内置浏览器)
新增https环境检测(总有人不看介绍,直接使用导致无法正常调用摄像头。)
更新文档
1.2.0(2022-06-01) 下载此版本
新增闪光灯开关(只有在谷歌内核浏览器中显示,推荐微信内置浏览器), 新增https环境检测(总有人不看介绍,直接使用导致无法正常调用摄像头。)
查看更多平台兼容性
Vue2 | Vue3 |
---|---|
√ | √ |
App | 快应用 | 微信小程序 | 支付宝小程序 | 百度小程序 | 字节小程序 | QQ小程序 |
---|---|---|---|---|---|---|
HBuilderX 3.1.0 | × | × | × | × | × | × |
钉钉小程序 | 快手小程序 | 飞书小程序 | 京东小程序 |
---|---|---|---|
× | × | × | × |
H5-Safari | Android Browser | 微信浏览器(Android) | QQ浏览器(Android) | Chrome | IE | Edge | Firefox | PC-Safari |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | × | × | × | × | × |
插件简绍
实现原理
二维码识别功能使用的是jsQR这个库,调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过canvas画布把摄像头获取到的数据展现到页面上,同时循环监听jsQR解析。
使用环境
经测试发现大部分浏览器都可以正常使用(微信,QQ,谷歌,火狐,safari),少数的安卓自带浏览器无法使用(浏览器内核版本过低)。需要https环境才能使用,本地测试可以在 manifest.json 中点击源码展示,找到h5 ,添加:"devServer" : { "https" : true}
需要https环境才能使用!!!
需要https环境才能使用!!!
需要https环境才能使用!!!
小知识点:苹果设备上不论什么浏览器都是safari套壳的,不论是谷歌还是火狐都是safari套壳。这也就是代表在苹果上无需担心无法使用此插件。(造成这样的现象是因为苹果有一则协议,浏览器只能使用safari内核)
在安卓系统上可以打开闪光灯
通过脚手架创建的 uni 项目,需要看这里
如果你是通过脚手架创建的 uni 的项目,需要自行安装 jsQR
依赖,并且修改组件中源码中的引入。通过 HBuilder 创建的项目不需要此操作。
# 安装 jsQR
npm install jsqr --save
# 修改组件源码对 jsQR 依赖
import jsQR from "jsqr"
插件使用
插件已支持 uni_modules 支持组件easycom,以下代码演示的是普通使用
<!-- HTML -->
<mumu-get-qrcode @success='qrcodeSucess' @error="qrcodeError" ></mumu-get-qrcode>
// js
import mumuGetQrcode from '@/uni_modules/mumu-getQrcode/components/mumu-getQrcode/mumu-getQrcode.vue'
// 嫌路径长的话可以单独复制出来
export default {
components: {
mumuGetQrcode
},
methods: {
qrcodeSucess(data) {
uni.showModal({
title: '成功',
content: data,
success: () => {
uni.navigateBack({})
}
})
},
qrcodeError(err) {
console.log(err)
uni.showModal({
title: '摄像头授权失败',
content: '摄像头授权失败,请检测当前浏览器是否有摄像头权限。',
success: () => {
uni.navigateBack({})
}
})
}
}
}
相关API
可传属性(Props)
参数 | 说明 | 类型 | 默认值 |
---|---|---|---|
continue | 是否连续获取。false 监听一次 true 持续监听 | Boolean | false |
exact | 选调用摄像头。environment 后摄像头 user 前摄像头 | String | environment |
size | 扫码屏幕大小。whole 全屏 balf 半屏 | String | whole |
definition | 调用摄像头清晰度。fasle 正常 true 高清 | Boolean | false |
事件(Events)
事件名 | 说明 | 回调参数 |
---|---|---|
success | 检测到图中有二维码并读取到数据是回调 | 二维码数据 |
error | 组件内部发送错误,通常是摄像头没有调用成功 | 错误信息,详情见下 |
常见的错误信息:
-
AbortError
[中止错误]尽管用户和操作系统都授予了访问设备硬件的权利,而且未出现可能抛出
NotReadableError
异常的硬件问题,但仍然有一些问题的出现导致了设备无法被使用。 -
NotAllowedError
[拒绝错误]用户拒绝了当前的浏览器实例的访问请求;或者用户拒绝了当前会话的访问;或者用户在全局范围内拒绝了所有媒体访问请求。
-
NotFoundError
[找不到错误]找不到满足请求参数的媒体类型。
-
NotReadableError
[无法读取错误]尽管用户已经授权使用相应的设备,操作系统上某个硬件、浏览器或者网页层面发生的错误导致设备无法被访问。
-
OverconstrainedError
[无法满足要求错误]指定的要求无法被设备满足,此异常是一个类型为
OverconstrainedError
的对象,拥有一个constraint
属性,这个属性包含了当前无法被满足的constraint
对象,还拥有一个message
属性,包含了阅读友好的字符串用来说明情况。 -
SecurityError
[安全错误]在
getUserMedia()
被调用的Document
上面,使用设备媒体被禁止。这个机制是否开启或者关闭取决于单个用户的偏好设置。 -
TypeError
[类型错误]constraints 对象未设置[空],或者都被设置为
false
。
插槽 (slot)
插槽名称 | 说明 | 默认值 |
---|---|---|
error | 当发送错误时,在页面上显示的内容 | 相机权限被拒绝提示 |