对于MUI的框架在使用摄像头直接扫码和选择相册图片进行扫码得出的参数不一致。
根据路相册径扫描图片扫出参数type得出的二维码类型是QR_CODE,而官方给出的二维码类型是plus.barcode.QR;
这里所以每次导致扫码类型的匹配不成功,需要手动对QR_CODE进行判断重新传入type = 0.
同时对于扫描相册图片的另一个参数result得出的一个有包含双引号的数据,而直接扫码得出的是不包含双引号.可能导致数据出入后端的错误;需要手动的对双引号进行删除拿到原始数据.
参考代码:
mui.plusReady(function(){
//避免卡顿对其添加500ms的延迟
setTimeout("startScan()", "500");
//绑定从相册选择二维码,link_select_qrcode是对应的跳转的链接元素,对其进行事件绑定
var link_select_qrcode = document.getElementById("link_select_qrcode");
link_select_qrcode.addEventListener("tap", function() {
gallery();
});
});
var scan;
function startScan() {
var styles = {
frameColor: "#128E12",
scanbarColor: "#0062CC",
background: ""
}
scan = new plus.barcode.Barcode('scanComponent', null, styles);
scan.onmarked = onmarked;
scan.start();
}
function onmarked( type, result ) {
if (type == plus.barcode.QR) {
//这里有一个bug,根据相册扫描的二维码参数包含了引号,需要做去除引号的处理
result = result.replace("\"","").replace("\"","")
var content = result.split("miniwechat_qrcode:");
console.log(result);
//......做一些请求的处理....
}
scan.start();
}
function gallery(){
if(!window.plus) return;
plus.gallery.pick( function(path){
alert(path);
plus.barcode.scan(path, function(type,result) {
if(type == "QR_CODE"){
onmarked(0, result);
} else{
onmarked(type, result)
}
}, function (error) {
plus.nativeUI.alert('无法识别此图片');
});
}, function ( e ) {
console.log( "取消选择图片" );
}, {filter:"image"});
}