Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 882|回复: 0

vue项目使用html5+ barcode扫码在苹果遇到的问题以及自己的解决方法

[复制链接]
  • TA的每日心情
    奋斗
    前天 12:49
  • 签到天数: 789 天

    [LV.10]以坛为家III

    2049

    主题

    2107

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    722638
    发表于 2021-6-20 17:41:26 | 显示全部楼层 |阅读模式
     
    之前在记录扫码 在安卓时,会出现黑屏,错位,闪退等等问题。解决方法在另一篇文章里 https://www.cnblogs.com/huzhuhua/p/11064764.html 。

    当时以为 是解决了。后来打包到IOS上时也是 出现。原因是

    plus.webview.create(location.href)这个不是在新的窗口打开,都是在同一窗口。我也不知道什么 原因。
    当时以为是路径问题,然后想到了换另一个地址试试。然后记录了另一篇vue引用多入口 文件 https://www.cnblogs.com/huzhuhua/p/11202565.html。
    后来还是不行。最终只能新建一个静态的camera.html页面,放在dist打包的文件夹内。一块打包成APP。在调用上我是做了区分,安卓还是照上面 的文章做。IOS的话
    就跳到camera.html。
    具体代码如下。
    要跳转去的VUE页面上
     
           
        let ws = plus.webview.create("./camera.html", "camera");
              ws.show();
              ws.addEventListener(
                "loaded",
                function() {
                  //页面加载完成后才显示
                  setTimeout(function() {
                    ws.show();
                  }, 200);
                },
                false
              );
              ws.addEventListener(
                "close",
                function() {
                  ws = null;
                },
                false
              );    

    camera.html页面上

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <meta http-equiv="X-UA-Compatible" content="ie=edge">
        <title>camera</title>
        <style>
            html,
            body,
            div,
            span,
            img {
                margin: 0;
                padding: 0;
            }
    
            body {
                background: #000;
            }
    
            .tips {
                margin-top: 50%;
                color: #fff;
                text-align: center
            }
    
            .action {
                position: fixed;
                z-index: 777;
                width: 100%;
                left: 0;
                bottom: 0;
    
    
            }
    
            .action .items {
                display: flex;
                justify-content: space-around;
                background: rgba(0, 0, 0, 0.35);
                width: 60%;
                padding: 4px;
                margin: 4px auto;
    
    
            }
    
            .action .items .item {
                flex-basis: 50px;
                text-align: center;
    
    
            }
    
            .action .items img {
                width: 27px;
            }
        </style>
    </head>
    
    <body>
        <div id="camera">
            <div id="scan"></div>
            <div class="tips">加载中...</div>
    
            <div class="action">
                <div class="items">
                    <div class="item" onclick="openLight"><img src="./src/assets/img/png-60@3x.png"></div>
                    <div class="item" onclick="getPicture"><img src="./src/assets/img/png-59@3x.png"></div>
                    <!-- <div
                    class="item"
                    @click="showInput"
                  ><img src="../assets/img/png-68@3x.png">
                  </div> -->
                    <div class="item" onclick="cancelScan"><img src="./src/assets/img/png-61@3x.png"></div>
                    <!-- <d class="item"><img src="../../assets/img/png-25@3x.png"></d -->
                </div>
            </div>
        </div>
    
    </body>
    <script>
    
        var isLight = false, scan = null;
        // 打开闪光灯
        function openLight() {
            isLight = !isLight;
            scan.setFlash(isLight);
        }
    
        //创建扫描控件
        function startRecognize() {
            if (!window.plus) return;
            scan = null;
            scan = new plus.barcode.Barcode(
                "scan",
                [plus.barcode.QR, plus.barcode.EAN8, plus.barcode.EAN13],
                {
                    frameColor: "#1294cb",
                    scanbarColor: "#1294cb",
                    top: "100px",
                    left: "0px",
                    width: "100%",
                    height: "500px",
                    position: "fixed"
                }
            );
            // 条码识别成功
            scan.onmarked = onmarked;
            function onmarked(type, result, file) {
                result = result.replace(/\n/g, "");
                localStorage.setItem("cameraData", result);
                let ws = plus.webview.getWebviewById("camera");
                ws.close()
            }
        }
        // //开始扫描
        function startScan() {
            if (!window.plus) return;
            startRecognize(); //创建控件
            setTimeout(() => {
                scan.start();
            }, 100);
        }
        // 取消扫描
        function cancelScan() {
            if (!window.plus) return;
            plus.navigator.setStatusBarStyle("dark");
            if (scan) {
                scan.cancel(); //关闭扫描
                scan.close(); //关闭条码识别控件
            }
            let ws = plus.webview.getWebviewById("camera");
            ws.close()
        }
        // 从相册选取二维码相片
        function getPicture() {
            plus.gallery.pick(src => {
                // scan.cancel(); //关闭扫描
                plus.barcode.scan(
                    src,
                    (type, result) => {
                        scan.cancel(); //关闭扫描
                        scan.close();
                        localStorage.setItem("cameraData", result);
                        plus.navigator.setStatusBarStyle("dark");
                        let ws = plus.webview.getWebviewById("camera");
                        ws.close()
                    }
                );
            });
        }
    
        window.onload = function () {
            setTimeout(() => {
                plus.navigator.setStatusBarStyle("dark");
                startScan()
            }, 400);
        }
    </script>
    
    </html>

    这样算解决了。折腾了N久

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-9-8 14:12 , Processed in 0.062889 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表