QuaggaJS网页条码扫描报Quagga.init不是函数错误如何解决
问题原因
- 你使用的1.0.0-beta版本Quagga的CDN资源为ES模块导出格式,全局挂载的
window.Quagga是模块容器对象,实际可调用的API全部挂载在Quagga.default属性下,直接调用Quagga.init会因为找不到对应方法抛出错误。 const Quagga = require('quagga').default是CommonJS模块化语法,仅在Node.js环境或经过前端打包工具处理的工程中可用,原生浏览器没有内置requireAPI,添加后必然报错,可直接删除该行代码。
修复方案
仅需要调整你的初始化代码,先从全局挂载的模块对象中拿到正确的Quagga实例即可,修改后的脚本部分如下:
<script type="text/javascript"> // 从全局模块对象中取出正确的Quagga实例 const Quagga = window.Quagga.default; Quagga.init({ inputStream : { name : "Live", type : "LiveStream", target: document.querySelector('#interactive'), constraints: { width: 520, height: 400, facingMode: "environment" //"environment" for back camera, "user" front camera } }, decoder : { readers : ["code_39_reader"] } }, function(err) { if (err) { console.log(err); return } console.log("Initialization finished. Ready to start"); Quagga.start(); Quagga.onDetected(function(result) { console.log(result.codeResult.code); }); }); </script>
注意事项
- 浏览器摄像头权限仅对运行在
localhost或者HTTPS协议的页面开放,HTTP公网环境会直接拒绝摄像头访问请求导致功能失效。 - 若需要识别其他类型的条码,可修改
decoder.readers配置项,添加对应格式的解码器即可。
内容的提问来源于stack exchange,提问作者Superdooperhero
相关产品推荐
相关产品推荐

