IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 小程序嵌套h5界面,在h5界面调用小程序的扫一扫功能(自用方法3) -> 正文阅读

[移动开发]小程序嵌套h5界面,在h5界面调用小程序的扫一扫功能(自用方法3)

前言:

????????因为小程序对项目要求比较多,我们经常会使用webview嵌套H5界面来,然后在H5界面来实现我们的一些功能页面,这里就会遇到一些问题,比如H5界面的微信扫码功能。

目录:

实现方法的尝试:(自用方法3)

方法1:

????????在h5界面中,点击调用小程序的官方扫一扫功能,点击H5让动态跳转到小程序的组件方法里面,然后调用小程序的官方扫一扫方法,扫码完成以后,在拿到数据跳转到我们的H5界面

弊端:

附官方方法:

方法2:

? ? ? ? 使用微信扫一扫功能,微信公众号的h5使用比较好,但是小程序嵌套的H5无法成功。

方法3:(自用)

? ? ? ? 在调研各种方法以后,最终使用了这个方法。但是点击扫一扫,必须用户授权,才可以打开我们的扫一扫弹框。方法是我们手动控制打开摄像头,然后获取扫码内容,请看下面的操作步骤。

1、界面引入我们的配置文件

scan.js? (配置文件)

h5scan.js (对扫码方法进行二次封装的js)

核心方法是三个操作摄像头的方法

2、封装了一个方法 openH5Scan? ,根据你的实际需要,如果不要弹框,界面写个video也行。

3、拿到扫码内容,根据你的实际需要来截取方法,没必要非按照我的来


实现方法的尝试:(自用方法3)

方法1:

????????在h5界面中,点击调用小程序的官方扫一扫功能,点击H5让动态跳转到小程序的组件方法里面,然后调用小程序的官方扫一扫方法,扫码完成以后,在拿到数据跳转到我们的H5界面

弊端:

? ? ? ? 会出现明显的页面闪烁,我们H5跳转小程序第一次闪烁,小程序跳转回来第二次闪烁,用户体验效果不好。

附官方方法:

小程序官方扫一扫方法:js中调用就行

wx.scanCode({
    success(res) {
        console.log(res)
        console.log(res.result);
    }
})

参数

属性类型默认值必填说明最低版本
onlyFromCamerabooleanfalse是否只能从相机扫码,不允许从相册选择图片1.2.0
scanTypeArray.<string>['barCode', 'qrCode']扫码类型1.7.0
successfunction接口调用成功的回调函数
failfunction接口调用失败的回调函数
completefunction接口调用结束的回调函数(调用成功、失败都会执行)

object.success 回调函数

...

方法2:

? ? ? ? 使用微信扫一扫功能,微信公众号的h5使用比较好,但是小程序嵌套的H5无法成功。

wx.scanQRCode({
    desc: 'scanQRCode desc',
    needResult: 1,
    scanType: ['qrCode'],
    success: function(res) {
       let getCode = res.resultStr

      },
    fail: function(res) {
        alert('fail' + res)
      }
})

方法3:(自用)

? ? ? ? 在调研各种方法以后,最终使用了这个方法。但是点击扫一扫,必须用户授权,才可以打开我们的扫一扫弹框。方法是我们手动控制打开摄像头,然后获取扫码内容,请看下面的操作步骤。

1、界面引入我们的配置文件

scan.js? (配置文件)

????????????????链接:https://pan.baidu.com/s/1VugLIvaRrTZtokU_-PQBnw? ?

???????????????? 提取码:dyt7

h5scan.js (对扫码方法进行二次封装的js)

核心方法是三个操作摄像头的方法

function H5Scan() {
    var selectedDeviceId = ''; //当前的摄像头
    var resultText = ''; //二维码内容
    var resultError = ''; //二维码报错信息
    var callback;

    //调用我们的scan.js里面的方法
    var codeReader = new ZXing.BrowserMultiFormatReader();


    this.callBack = function (fun) {
        callback = fun;
    };

    /**
     * 初始化摄像头
     */
    this.initFun = function () {
        codeReader.listVideoInputDevices()
            .then((videoInputDevices) => {
                if (videoInputDevices.length >= 1) {
                    //获取最后一个摄像头
                    selectedDeviceId = videoInputDevices[videoInputDevices.length - 1].deviceId
                }
            })
            .catch((err) => {
                console.error(err)
                dialogBox.showMessDialog("扫码失败:" + err);
            })
    };
    /**
     * 打开摄像头
     */
    this.openCodeReader = function () {
        codeReader.decodeFromVideoDevice(selectedDeviceId, 'video', (result, err) => {
            if (result) {
                resultText = result.text;
                this.closeCodeReader('success', result.text); //关闭摄像
            }
            if (err && !(err instanceof ZXing.NotFoundException)) {
                resultError = err;
                this.closeCodeReader('error', err); //关闭摄像
            }
        })
    };

    /**
     *@关闭摄像头
     *  title = 成功/失败
     *  text = 二维码内容/报错信息
     *  resultText 扫码成功以后的内容
     *  resultError 扫码失败以后的报错信息
     * */
    this.closeCodeReader = function (title, text) {
        if (callback) {
            eval(callback(text));
        }
        codeReader.reset()
        $('.modal').hide() //关闭弹框
    };
    /**
     * 打开弹框
     */
    this.openScanFun = function () {
        this.openCodeReader()
        setTimeout(() => {
            $('.modal').show()
        }, 500)

    };
    /**
     * 初始化函数
     * @param callback 回调函数
     */
    this.init = function (callback) {
        this.callBack(callback);
        this.initFun();
        this.openScanFun();
    }
}

var H5Scan = new H5Scan();

2、封装了一个方法 openH5Scan? ,根据你的实际需要,如果不要弹框,界面写个video也行。

 //扫一扫弹框封装
    this.openH5Scan = function (callback) {

        //我这里是提前加载两个js,你自己用放script里面也可以
        this.loadJsOrCss("/js/qrcode/scan.js");
        this.loadJsOrCss("/js/qrcode/h5scan.js");




        //我这里是封装的一个弹框+内容
        var html = `
        <div class="modal" style="position: fixed;width: 100vw;height: 100vh;background: rgba(0,0,0,.8);top: 0;display: none;z-index: 100000;">
          <div class="closeImg" onclick="$('.modal').hide()" style="width: 15vw;height: 15vw;float:right;">
              <img src="../../images/close-1.png" alt="关闭" style="width: 100%;height: 100%;cursor: pointer;"/>
          </div>
          <div class="content">


            //***核心内容,如果你不需要弹框,只写video就行***
              <video id="video" autoplay="true" muted="true" playsinline="true" style="width: 90vw;height: 80vh;position: absolute;left: 5vw;top: 10vh;"></video>




          </div>
      </div>
      `;
        var val = $('.modal').html();
        //如果页面没有该dom,添加
        if (!val) {
            $('body').append(html);
        }

        //调用H5scan.js里面封装的方法
        H5Scan.init(callback);


    }

3、拿到扫码内容,根据你的实际需要来截取方法,没必要非按照我的来

/**
   * 扫一扫
   * @param function  回调方法,获取扫码结果
   * @param e 扫码返回值JSON格式
 */
 page.openH5Scan(function (e) {
     $("#result").html(e);
 });

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:22:00  更:2022-06-01 15:22:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 0:22:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码