<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" />
<link href="css/style.css" rel="stylesheet" />
<link href="css/iconfont.css" rel="stylesheet" />
<script type="text/javascript" src="js/mui.js"></script>
<script type="text/javascript" src="js/common.js"></script>
<script type="text/javascript" src="js/fd/fd.mui.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();
//执行刷新
window.addEventListener('refreshBarcode', function() {
plus.webview.open('barcodeScan.html');
}, false);
// 开始扫描
ws.addEventListener('show', function() {
scan = new plus.barcode.Barcode('bcid', [plus.barcode.QR], {
frameColor: "#1294cb",
scanbarColor: "#1294cb",
top: "100px",
left: "0px",
width: "100%",
height: "500px",
position: "fixed"
});
scan.onmarked = onmarked;
scan.start({
conserve: true,
filename: '_doc/barcode/'
});
}, false);
// 显示页面并关闭等待框
ws.show('pop-in');
// wo.evalJS('closeWaiting()');
}
var flag = false;
function light() {
if (flag == false) {
scan.setFlash(true);
flag = true;
document.getElementById("turnTheLight").innerHTML = "关闭闪光灯";
} else {
scan.setFlash(false);
flag = false;
document.getElementById("turnTheLight").innerHTML = "打开闪光灯";
}
}
if (window.plus) {
plusReady();
} else {
document.addEventListener('plusready', plusReady, false);
}
// 监听DOMContentLoaded事件
document.addEventListener('DOMContentLoaded', function() {
domready = true;
plusReady();
}, false);
//改变手机back物理键盘
mui.back = function() {
scan.close();
plus.webview.close('barcodeScan.html');
mui.fire(plus.webview.getLaunchWebview(), 'tapNavTarget', {
targetTab: 'Index.html'
});
};
function backIndex() {
plus.webview.close('barcodeScan.html');
scan.close();
back();
return;
}
// 二维码扫描成功
function onmarked(type, result, file) {
//result中是二维码中的信息,下面条件根据自身项目的条件改变
console.log('type:' + type);
console.log('result:' + result);
if (type == 0) {
if (result === "" || result == null) {
mui.toast('无法识别此码,请核对后在重新扫码');
scan.start();
} else {
//成功的逻辑
}
} else {
fd.log('扫描异常type:' + type);
fd.log('扫描异常:' + result);
scan.start();
}
}
// 从相册中选择二维码图片
function scanPicture() {
plus.gallery.pick(function(path) {
plus.barcode.scan(path, onmarked, function(error) {
mui.toast('无法识别此图片');
});
}, function(err) {
console.log('Failed:' + err.message);
});
}
</script>
<link rel="stylesheet" href="css/common.css" type="text/css" charset="utf-8" />
</head>
<body style="background: #000000;">
<div id="bcid">
<div style="height:40%"></div>
<!-- <p class="tip">...载入中...</p> -->
</div>
<div class="Fiexd_bcid">
<div class="Flex">
<div class="b_open" id="turnTheLight" onclick="light()">
<cite class="iconfont icon-shanguangdeng-liang"></cite>
<p>打开闪光灯</p>
</div>
<div class="b_open" onclick="scanPicture()">
<cite class="iconfont icon-xiangce1"></cite>
<p>相册</p>
</div>
<div class="b_close" onclick="backIndex()">
<cite class="iconfont icon-guanbi1"></cite>
<p>关闭</p>
</div>
</div>
</div>
</body>
</html>
![搬砖小祝](https://img-cdn-tc.dcloud.net.cn/account/identicon/45a8f2b7e2e7740f46bec8db8958336d.png)
- 发布:2022-11-15 15:32
- 更新:2022-11-16 15:13
- 阅读:422
产品分类: HTML5+
HBuilderX版本号: 3.6.4
手机系统: iOS
手机系统版本号: iOS 16
手机厂商: 苹果
手机机型: iPhone 8plus
打包方式: 云端
示例代码:
操作步骤:
iOS 真机运行,扫码代码无效
iOS 真机运行,扫码代码无效
预期结果:
可以正常扫码,扫相册二维码图片能正常解析
可以正常扫码,扫相册二维码图片能正常解析
实际结果:
Android扫码正常,相册扫码正常;
iOS 扫码无效,相册扫码无效
Android扫码正常,相册扫码正常;
iOS 扫码无效,相册扫码无效
bug描述:
1、应用使用了扫码功能;
2、在Android端一切正常;
3、在iOS端同样代码,扫码无法打开相机,去应用权限中查看根本没有相机权限,也无法主动打开;
3.1、给了相应权限: "permissions" : {"Camera" : {"description" : "需获取摄像头权限,首页扫码时使用"}},
3.2、权限配置栏,iOS的隐私信息访问许可描述也都填写了
3.3、跳转到扫码的html,还是无效,
3.4、进去手机设置,应用设置,发现 该app根本就没相机权限,也无法手动打开该权限
3.5、无法扫码就使用相册的二维码,调接口二维码也解析不到
搬砖小祝 (作者)
void bc.onmarked = function(type, code, file){// loaded code } 文档上也是3个参数,而且Android上是正常可用的呢
2022-11-16 08:02
搬砖小祝 (作者)
这段在iOS上执行不到
2022-11-16 08:23
搬砖小祝 (作者)
等于相机都没调起,会不会是因为这个方法没触发到,所以才没提示获取相机权限,也就卡在这了
2022-11-16 08:35
DCloud_iOS_WZT
回复 9***@qq.com: 你试一下啊 在这个方法里打一个log 我这边测试barcode功能没问题
2022-11-16 10:51
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: 上边代码在方法里打log了,没输出。
2022-11-16 11:27
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: 回复 DCloud_iOS_WZT: 方便的话加下微信,我把项目的部分发你,帮忙看下
2022-11-16 11:31
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: VX:iOSSeniorEngineer,大佬帮忙
2022-11-16 11:32
DCloud_iOS_WZT
回复 9***@qq.com: 你这个ws.addEventListener 在哪找的? 文档地址发一下
2022-11-16 11:56
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: 某得文档,别人代码现在接手了,
如果这么写不对的话,应该怎么搞,望指教
2022-11-16 12:03
DCloud_iOS_WZT
回复 9***@qq.com: https://www.html5plus.org/doc/zh_cn/ios.html#plus.ios.currentWebview 看文档
2022-11-16 12:14
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: plus.ios.currentWebview(); 改iOS,也调不起来啊
2022-11-16 13:50
搬砖小祝 (作者)
回复 DCloud_iOS_WZT: 大佬,明确哪的写法问题的话,直接告诉我下,文档都研究过也试过了啊
2022-11-16 14:00