已安装Cordova Barcode Scanner但调用扫码功能触发错误求助
解决Cordova BarcodeScanner插件在Meteor中提示"Cannot read property 'barcodeScanner' of undefined"的问题
我之前在Meteor项目里用这个插件时也踩过同样的坑,给你几个实用的排查和解决方向,应该能帮你搞定:
1. 必须等Cordova完全初始化后再调用插件
这是最常见的原因!Meteor和Cordova的加载有先后顺序,直接在页面加载完成就调用扫码代码的话,cordova对象还没被初始化,自然找不到barcodeScanner属性。
你需要把扫码逻辑放到deviceready事件回调里,确保Cordova环境准备就绪:
document.addEventListener("deviceready", function() { // 给扫码按钮绑定点击事件 document.getElementById('scanButton').addEventListener('click', function() { cordova.plugins.barcodeScanner.scan( function (result) { alert("We got a barcode\n" + "Result: " + result.text + "\n" + "Format: " + result.format + "\n" + "Cancelled: " + result.cancelled); }, function (error) { alert("Scanning failed: " + error); }, { preferFrontCamera : true, showFlipCameraButton : true, showTorchButton : true, torchOn: true, saveHistory: true, prompt : "Place a barcode inside the scan area", resultDisplayDuration: 500, formats : "QR_CODE,PDF_417", orientation : "landscape", disableAnimations : true, disableSuccessBeep: false } ); }); }, false);
如果用的是Meteor Blaze模板,还可以把逻辑放到模板的onRendered钩子中,确保DOM也加载完成:
Template.scanPage.onRendered(function() { document.addEventListener("deviceready", function() { this.$('#scanButton').click(function() { // 这里放扫码逻辑 }); }.bind(this), false); });
2. 重新安装插件,清理Meteor缓存
有时候Meteor的插件安装会出现缓存不同步的问题,导致插件没真正加到Cordova项目里。试试这些操作:
- 先清理Meteor缓存:
meteor reset - 移除并重新安装插件:
meteor remove cordova:phonegap-plugin-barcodescanner@6.0.8 meteor add cordova:phonegap-plugin-barcodescanner@6.0.8 - 手动验证插件是否安装成功:进入项目的
.meteor/local/cordova-build目录,运行cordova plugin list,确认列表里有phonegap-plugin-barcodescanner。
3. 确保运行环境是真实设备或支持摄像头的模拟器
这个插件依赖设备的摄像头,浏览器环境下cordova对象本身就是undefined的!你必须用meteor run android-device连接真实的Android设备,或者使用带摄像头功能的Android模拟器来测试。
4. 检查版本兼容性
你使用的插件版本是6.0.8,要确认它和你的Meteor版本是否兼容。如果上面的方法都没用,可以试试升级或降级插件版本,比如换成最新的稳定版(注意Meteor安装Cordova插件的语法是cordova:插件名@版本)。
内容的提问来源于stack exchange,提问作者MarkZ
相关产品推荐
相关产品推荐

