js开启扫码实现
使用HTML5的getUserMedia API实现扫码
在浏览器中实现扫码功能可以通过访问摄像头并使用JavaScript库解析二维码。常见的库有jsQR和ZXing。
安装jsQR库:
npm install jsqr
示例代码:
<video id="qr-video" width="300" height="300"></video>
<canvas id="qr-canvas" style="display:none;"></canvas>
<script src="https://cdn.jsdelivr.net/npm/jsqr@1.4.0/dist/jsQR.min.js"></script>
<script>
const video = document.getElementById('qr-video');
const canvas = document.getElementById('qr-canvas');
const ctx = canvas.getContext('2d');
navigator.mediaDevices.getUserMedia({ video: { facingMode: 'environment' } })
.then(stream => {
video.srcObject = stream;
video.play();
requestAnimationFrame(tick);
});
function tick() {
if (video.readyState === video.HAVE_ENOUGH_DATA) {
canvas.width = video.videoWidth;
canvas.height = video.videoHeight;
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const code = jsQR(imageData.data, imageData.width, imageData.height);
if (code) {
console.log('Found QR code:', code.data);
}
}
requestAnimationFrame(tick);
}
</script>
使用ZXing库实现扫码
ZXing是一个功能更强大的二维码处理库,支持更多格式。
安装ZXing:
npm install @zxing/library
示例代码:
import { BrowserQRCodeReader } from '@zxing/library';
const codeReader = new BrowserQRCodeReader();
codeReader.decodeFromInputVideoDevice(undefined, 'qr-video')
.then(result => console.log(result.text))
.catch(err => console.error(err));
移动端扫码实现
对于移动端应用,可以使用Cordova或Capacitor插件:
安装Cordova插件:
cordova plugin add phonegap-plugin-barcodescanner
调用示例:
cordova.plugins.barcodeScanner.scan(
result => console.log('Scanned:', result.text),
error => console.log('Error:', error)
);
安全性考虑
使用摄像头时需要用户授权,确保在HTTPS环境下运行。在iOS上,getUserMedia需要用户主动交互才能触发。
性能优化
对于持续扫码场景,可以限制解析频率:
let lastScan = 0;
function tick() {
const now = Date.now();
if (now - lastScan < 500) {
requestAnimationFrame(tick);
return;
}
lastScan = now;
// 解析逻辑...
}
兼容性处理
检测浏览器支持情况:

if (!navigator.mediaDevices || !navigator.mediaDevices.getUserMedia) {
alert('您的浏览器不支持摄像头访问');
}






