m***@163.com
m***@163.com
  • 发布:2017-08-19 22:20
  • 更新:2019-09-27 13:12
  • 阅读:2620

H5扫描控件第二次使用时无法使用

分类:HTML5+
    var ws=null,wo=null;  
    var scan=null,domready=false;  
    // H5 plus事件处理  
    function plusReady(){  
        var height = window.innerHeight + 'px';//获取页面实际高度    
        var width = window.innerWidth + 'px';    
        document.getElementById("bcid").style.height = height;    
        document.getElementById("bcid").style.width = width;  

        if(ws||!window.plus||!domready){  
            return;  
        }  
        // 获取窗口对象  
        ws=plus.webview.currentWebview();  
        wo=ws.opener();  
        // 开始扫描  
        ws.addEventListener('show', function(){  
            scan=new plus.barcode.Barcode('bcid');  
            scan.onmarked=onmarked;  
            scan.start({conserve:true,filename:'_doc/barcode/'});  
        }, false);  
        // 显示页面并关闭等待框  
        ws.show('pop-in');  
    }  
    if(window.plus){  
        plusReady();  
    }else{  
        document.addEventListener('plusready', plusReady, false);  
    }  
    // 监听DOMContentLoaded事件  
    document.addEventListener('DOMContentLoaded', function(){  
        domready=true;  
        plusReady();  
    }, false);  
    // 二维码扫描成功  
    function onmarked(type, result, file){  
        switch(type){  
            case plus.barcode.QR:  
            type = 'QR';  
            break;  
            case plus.barcode.EAN13:  
            type = 'EAN13';  
            break;  
            case plus.barcode.EAN8:  
            type = 'EAN8';  
            break;  
            default:  
            type = '其它'+type;  
            break;  
        }  
        result = result.replace(/\n/g, '');  

        //如果扫描值不为空且为数字,储存扫描结果,跳转diancai.html  
//      alert("扫描结果为:" + result + ",非数字:" + isNaN(result));  
        if(result != null && isNaN(result)){  
            var btnArray = ['重新扫描'];  
            mui.confirm('请扫描正确的桌号!', '', btnArray, function(e)   
            {  
                plusReady();//此处从新调用扫描,但是无法进行扫描  
            })  
        } else{  
            localStorage.setItem("test",result);  
            mui.openWindow({  
                url:"diancai.html",  
                id:"diancan.html",  
//              }  
            });  
        }

在扫描错误然后第二次调用plusReady();的时候黑屏或者无法进行扫描,不调用直接刷新本页面也不行,这是什么问题?

2017-08-19 22:20 负责人:无 分享
已邀请:
wenju

wenju - https://www.mescroll.com -- 精致的下拉刷新和上拉加载组件

扫一扫是很耗资源的,扫描后不关闭android手机很容易发烫, 扫码之后就要关闭:

//初始化  
var  scan = new plus.barcode.Barcode(domid,filter);  

//开始扫码  
scan.start();  

扫码之后关闭  
scan.close();  

//第二次再想扫描再调用  
scan.start();  

//如果Webview关闭,需在关闭前调用  
scan.close();
DCloud_heavensoft

DCloud_heavensoft

要不关闭第一个带扫码的Webview,再开第二个进行扫码。要不转到第一个带扫码的Webview重新扫码。
摄像头是独占的,第一个不关闭,第二个无法使用。

lam

lam

扫完后关掉重新调吧

1***@qq.com

1***@qq.com

扫完码处理之前先把 扫描对象关闭掉 就好了

1***@qq.com

1***@qq.com

scan.start(); 开始调用系统摄像头获取图片数据进行扫码识别,当识别出条码数据时通过onmarked回调函数返回。
scan.close();释放控件占用系统资源,调用close方法后控件对象将不可使用。
scan.cancel();结束对摄像头获取图片数据进行条码识别操作,同时关闭摄像头的视频捕获。 结束后可调用start方法重新开始识别。
所以,根据业务情况,扫码完成先调scan.cancel(),相当于暂停使用,如果错误就调scan.start()重新开启使用;如果打算使用scan.close(),就相当于把创建的scan给销毁了,只能重新new 一个scan实例再启用。

2***@qq.com

2***@qq.com - 123456789

你好,你的这个问题当时怎么解决的

该问题目前已经被锁定, 无法添加新回复