搬砖小祝
搬砖小祝
  • 发布:2022-11-15 15:32
  • 更新:2022-11-16 15:13
  • 阅读:299

【报Bug】5+ App iOS无法扫码

分类:HTML5+

产品分类: HTML5+

HBuilderX版本号: 3.6.4

手机系统: iOS

手机系统版本号: iOS 16

手机厂商: 苹果

手机机型: iPhone 8plus

打包方式: 云端

示例代码:
<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>  

操作步骤:

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、无法扫码就使用相册的二维码,调接口二维码也解析不到

2022-11-15 15:32 负责人:无 分享
已邀请:
DCloud_iOS_WZT

DCloud_iOS_WZT

https://www.html5plus.org/doc/zh_cn/barcode.html onmarked 就两个参数吧

  • 搬砖小祝 (作者)

    void bc.onmarked = function(type, code, file){// loaded code } 文档上也是3个参数,而且Android上是正常可用的呢

    2022-11-16 08:02

  • 搬砖小祝 (作者)

                    // 开始扫描  
    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"
    });
    console.log('scan:' + scan);
    scan.onmarked = onmarked;
    scan.start({
    conserve: true,
    filename: '_doc/barcode/'
    });

    }, false);

    这段在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: 某得文档,别人代码现在接手了,


                    ws = plus.webview.currentWebview();    
    //下边就加载当前webview了,
    ws.addEventListener

    如果这么写不对的话,应该怎么搞,望指教

    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

搬砖小祝

搬砖小祝 (作者)

问题可以关闭了,style样式问题,Android正常,iOS就不行,删掉不设置就好了

要回复问题请先登录注册