全村最帅的希望
全村最帅的希望
  • 发布:2017-09-14 16:37
  • 更新:2020-09-09 17:36
  • 阅读:4963

【报Bug】 二维码多次扫描出现黑屏

分类:MUI

详细问题描述
[内容]
mui框架 打开二维码扫描可能会出现黑屏幕的现象
重现步骤
[步骤]
连续点击扫描二维码返回再次进入 如此操作多次
[结果]
有时候出现黑屏 即div背景全是黑色
[期望]
能够正常扫描
运行环境
android 6.0 红米n0te3 MIUI8.5
[系统版本]
6.0
[浏览器版本]
[IDE版本]
最新版
[mui版本]
/**

  • MUI核心JS
  • @type _L4.$|Function
    */
    附件
    [代码片段]
    默认项目em 二维码扫描例子源代码
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="initial-scale=1.0, maximum-scale=1.0, user-scalable=no"/>
    <meta name="HandheldFriendly" content="true"/>
    <meta name="MobileOptimized" content="320"/>
    <title>Hello H5+</title>
    <script type="text/javascript" src="../js/common.js"></script>
    <script type="text/javascript">
    var ws=null,wo=null;
    var scan=null,domready=false;
    // H5 plus事件处理
    function plusReady(){
    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');
    wo.evalJS('closeWaiting()');
    }
    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, '');
    wo.evalJS("scaned('"+ type +"','"+ result +"','"+ file +"');");
    back();
    }
    // 从相册中选择二维码图片
    function scanPicture(){
    plus.gallery.pick(function(path){
    plus.barcode.scan(path,onmarked,function(error){
    plus.nativeUI.alert('无法识别此图片');
    });
    }, function(err){
    console.log('Failed: '+err.message);
    });
    }
    </script>
    <link rel="stylesheet" href="../css/common.css" type="text/css" charset="utf-8"/>
    <style type="text/css">

    bcid {

    width: 100%;
    position: absolute;
    top: 0px;
    bottom: 44px;
    text-align: center;
    }
    .tip {
    color: #FFFFFF;
    font-weight: bold;
    text-shadow: 0px -1px #103E5C;
    }
    footer {
    width: 100%;
    height: 44px;
    position: absolute;
    bottom: 0px;
    line-height: 44px;
    text-align: center;
    color: #FFF;
    }
    .fbt {
    width: 50%;
    height: 100%;
    background-color: #FFCC33;
    float: left;
    }
    .fbt:active {
    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.5);
    box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.5);
    }
    </style>
    </head>
    <body style="background-color: #000000;">
    <div id="bcid">
    <div style="height:40%"></div>
    <p class="tip">...载入中...</p>
    </div>
    <footer>
    <div class="fbt" onclick="back()">取  消</div>
    <div class="fbt" onclick="scanPicture()">从相册选择二维码</div>
    </footer>
    </body>
    </html>

[安装包]

联系方式
[QQ] 2536555456
[电话]

2017-09-14 16:37 负责人:无 分享
已邀请:
五叶神

五叶神 - 世界上没有免费的午餐,也不要有一颗贪婪的心

因为是原生对象,返回关闭页面的时候要将上一个扫码控件销毁掉。

var scan=new plus.barcode.Barcode  

scan.close();  //关闭时执行  
全村最帅的希望

全村最帅的希望 (作者) - 18线移动前端小码农

这样哦 谢谢啊

8***@qq.com

8***@qq.com

解决方案,加个函数:

function startRecognize() {  
    scan = new plus.barcode.Barcode('bcid');  
    scan.onmarked = onmarked;   
    scan.start();  
}

然后在你跳转到二维码页面之前调用该函数,重置启动以下就可以了

startRecognize()
5***@qq.com

5***@qq.com

不管用

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