用的官方demo修改了下,从主界面到扫描界面再打开新界面。多次扫描之后扫描界面会卡死,后台显示扫描的url是识别出来的,也没有报错。 用的mui.openwindow,createNew:true加上了,scan.close也写了。
以下是扫码界面
<!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 src="../js/mui.min.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();
// 开始扫描
startRecognize();
// 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);
}
function startRecognize() {
scan = new plus.barcode.Barcode('bcid');
scan.onmarked = onmarked;
scan.start();
}
// 监听DOMContentLoaded事件
document.addEventListener('DOMContentLoaded', function(){
domready=true;
plusReady();
}, false);
// 二维码扫描成功
function onmarked(type, result, file){
// result = result.replace(/\r\n/g, '');
// wo.evalJS("scaned('"+ type +"','"+ result +"','"+ file +"');");
// back();
scan.close();
mui.openWindow({ //这个执行不成功。但是有时候打开扫码功能不立刻扫码,等一会再扫码的话就可以跳转。。。
url: 'C.html',
createNew:true,
id: 'info',
extras: {
result: result
},
styles: { // 窗口参数 参考5+规范中的WebviewStyle,也就是说WebviewStyle下的参数都可以在此设置
titleNView: { // 窗口的标题栏控件
buttons: [{
text: '\ue63c',
float: 'left',
onclick: clickButton,
fontSrc:'_www/iconfont/iconfont.ttf'
}],
titleText: "标题栏", // 标题栏文字,当不设置此属性时,默认加载当前页面的标题,并自动更新页面的标题
titleColor: "#000000", // 字体颜色,颜色值格式为"#RRGGBB",默认值为"#000000"
titleSize: "17px", // 字体大小,默认17px
backgroundColor: "#43cda9", // 控件背景颜色,颜色值格式为"#RRGGBB",默认值为"#F7F7F7"
progress: { // 标题栏控件的进度条样式
color: "#00FF00", // 进度条颜色,默认值为"#00FF00"
height: "2px" // 进度条高度,默认值为"2px"
},
splitLine: { // 标题栏控件的底部分割线,类似borderBottom
color: "#CCCCCC", // 分割线颜色,默认值为"#CCCCCC"
height: "1px" // 分割线高度,默认值为"2px"
}
}
}
});
scan.close();
}
// 从相册中选择二维码图片
function scanPicture(){
plus.gallery.pick(function(path){
plus.barcode.scan(path,onmarked,function(error){
plus.nativeUI.alert('无法识别此图片');
});
}, function(err){
console.log('Failed: '+err.message);
});
}
function clickButton() {
mui.back();
};
</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>
创建的新界面
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
<title>扫码</title>
<style type="text/css">
</style>
</head>
<body>
<p id="data"></p>
<script src="../js/mui.min.js"></script>
<script type="text/javascript" src="../js/custom/ajax.js"></script>
<script type="text/javascript" src="../js/custom/md5.js"></script>
<script type="text/javascript" src="../js/custom/tripledes.js"></script>
<script type="text/javascript" src="../js/custom/mode-ecb.js"></script>
<script type="text/javascript">
var key = "6Ta4OaHZdpA=";
if(window.plus) {
plusready();
} else {
document.addEventListener('plusready', plusready, false);
}
function plusready() {
var w = plus.webview.currentWebview();
var data = w.result;
//处理返回事件
var data_jmh = decryptByDES(data, key); //解密
var data_fg = data_jmh.split("***"); //解密分割
var data_g = data.split("***"); //没加密解密的分割
if(data_fg.length < 5) {
alert("无法识别");
} else {
var d1 = data_fg[2].split('=');
d1.shift();
var str = d1.join('='); //拿到链接
console.log("结果" + str);
var date = data_fg[4].split('='); //endtime
var day = date[1]; //具体时间
var date_ = new Date(day);
var today = new Date();
if(date_ > today) {
window.location.href = str;
} else {
alert("二维码已失效");
}
//处理返回事件
plus.key.addEventListener('backbutton', function() {
plus.webview.currentWebview().close();
})
}
}
</script>
</body>
</html>
5 个回复
DCloud_App_Array
请说明在什么设备出现此问题?
提供复现问题的示例应用。
1***@qq.com
楼主解决没,我也是此问题。
如果扫码,可以多次用,不扫码后退会卡死
具体操作:打开扫一扫页,不扫码后退,再打开扫一扫页,再次后退。2次就卡死。
叶南淮 (作者)
没,我倒是不扫码就不会卡 扫了码才卡
2019-08-15 16:29
叶南淮 (作者)
下面传了demo
2019-10-31 15:34
c***@163.com
哎,我这也是经常黑屏,这半个月了,楼主解决了没
叶南淮 (作者)
我下面传了demo
2019-10-31 15:33
叶南淮 (作者)
已解决 最后还是百度到了一个示例,没有用官方的例子
function plusready() {
setTimeout(function() {
scan = new plus.barcode.Barcode('mask');
scan.start();
scan.onmarked = function(type, result) {
if(result) {
//alert(result);
scan.close();
var w = plus.webview.create('C.html', 'C.html', {
'titleNView': {
'backgroundColor': '#349eff',
'titleText': '',
'titleColor': '#FFFFFF',
autoBackButton: true,
progress: { // 标题栏控件的进度条样式
color: "#00FF00", // 进度条颜色,默认值为"#00FF00"
height: "2px" // 进度条高度,默认值为"2px"
}
}
}, {
barcode_data: result
});
w.show('pop-in', '300ms');
}
};
}, 200);
叶南淮 (作者)
以下为demo