html5QrCode调用getCameras报is not a function错误如何解决
错误产生原因
- 核心原因:
getCameras()是Html5Qrcode类的静态方法,只能通过类本身调用,你在实例化得到的html5QrCode对象上调用该方法,自然会抛出「不是函数」的类型错误。 - 次要诱因:如果你修正调用方式后仍然报错,说明你本地引入的
html5-qrcode.min.js版本过低,v2.0.0之前的版本没有对外暴露这个静态方法。
修复步骤
- 第一步:检查本地引入的库版本,若低于v2.0.0,先替换为v2.0.0及以上版本的资源文件
- 第二步:将代码中
html5QrCode.getCameras()的调用主体改为类本身,即写成Html5Qrcode.getCameras() - 补充注意:摄像头枚举、调用接口需要在HTTPS环境或localhost本地调试环境下运行,否则浏览器会拦截权限,直接进入失败回调分支
修正后可运行代码
<script src="/js/html5-qrcode.min.js"></script> <script> var html5QrCode = new Html5Qrcode("scanner-container"); const qrCodeSuccessCallback = (decodedText, decodedResult) => { html5QrCode.stop().then((ignore) => { // 扫码成功后的业务逻辑 }).catch((err) => { console.log(err); }); }; const config = { fps: 10, qrbox: 250 }; // 调用类的静态方法枚举摄像头 Html5Qrcode.getCameras().then(devices => { if($(".scan-dom").hasClass("notVisible")){ $(".scan-dom").removeClass("notVisible"); } html5QrCode.start({ facingMode: "environment" }, config, qrCodeSuccessCallback); }).catch(err => { console.log("No Camera Found"); if(!$(".scan-dom").hasClass("notVisible")){ $(".scan-dom").addClass("notVisible"); } $(".noCameraMessage").removeClass("hide"); }); </script>
内容的提问来源于stack exchange,提问作者Rahul Gupta
相关产品推荐
相关产品推荐

