当前位置:   article > 正文

小程序嵌套h5界面,在h5界面调用小程序的扫一扫功能_企业微信扫一扫h5开发案例

企业微信扫一扫h5开发案例

前言:

        小程序嵌套h5界面,在h5界面调用小程序的扫一扫功能,思路:主要是小程序上用webview嵌套H5页面,然后H5点击调用小程序的扫一扫,然后通过改变webview的路径带参数的方式将扫描结果返回到H5页面来实现

不足之处:

可以实现h5界面调用小程序的扫一扫,但是页面会明显闪动,视觉效果不好。

实现方法:

1、h5界面部分:abc.html是h5界面的地址(返回地址)

  1. $('.clickJump').on('click', function () {
  2. openWXSYS("/abc.html?CH1=" + escape(escape(escape(aaa))) + "&CH2=" + escape(escape(escape(bbb))));
  3. });

h5界面封装js方法

  1. //微信小程序封装地址=/pages/scanCode/scanCode
  2. function openWXSYS(callBackUrl) { //打开微信扫一扫,callBackUrl在微信小程序中获取参数
  3. var url = '/pages/scanCode/scanCode?callBackUrl=' + callBackUrl;
  4. goMicroMessengerPage(url);
  5. };
  1. goMicroMessengerPage = function (url) {
  2. var ua = window.navigator.userAgent.toLowerCase();
  3. if (ua.match(/MicroMessenger/i) == 'micromessenger') { // 判断是否是微信环境
  4. // 微信环境,如果不是Vue导入方式,需要写成window.wx.miniProgram.getEnv()
  5. wx.miniProgram.getEnv(function (res) {
  6. if (res.miniprogram) {
  7. wx.miniProgram.navigateTo({
  8. url: url,//小程序地址
  9. success: function () {
  10. console.log("调用成功!")
  11. },
  12. fail: function () {
  13. alert("调用失败");
  14. wx.showToast({
  15. title: '调用小程序失败!',
  16. icon: 'none'
  17. })
  18. }
  19. });
  20. } else {
  21. console.log('不在微信环境中,无法调用微信小程序!');
  22. }
  23. })
  24. } else {
  25. console.log('不在微信环境中,无法进行调用微信小程序!');
  26. }

2、微信小程序部分:

(1)app.json中添加扫一扫路由

  1. "pages": [
  2. "pages/scanCode/scanCode", //添加扫一扫页面
  3. ],

(2)在pages里面创建扫一扫全套页面,scanCode

其他的文件都是空的默认就行,重点是js文件,scanCode.js

方法:onLoad,拿到我们刚在路径上拼接的参数,options.callBackUrl

  1. onLoad: function(options) {
  2. console.log(this.options)
  3. var that = this;
  4. var callBackUrl = options.callBackUrl; //回调地址
  5. if (callBackUrl !== "" && callBackUrl != null && callBackUrl != undefined) {
  6. callBackUrl = unescape(callBackUrl);
  7. this.setData({
  8. callBackUrl: callBackUrl
  9. })
  10. }
  11. that.wxScanCode();
  12. // 调用地址
  13. },

 wx.scanCode是调用微信小程序原生的方法来实现扫一扫功能

  1. wxScanCode: function() {
  2. var that = this;
  3. var callBackUrl = this.data.callBackUrl;
  4. //兼容ios微信无法立即调起扫一扫
  5. setTimeout(function() {
  6. wx.scanCode({ //调用扫一扫
  7. success: function(res) { //扫码成功的回调函数
  8. console.log("调用成功:" + res)
  9. var scanState = res.errMsg;
  10. var scanType = res.scanType;
  11. var scanResult = res.result; //二维码的内容
  12. wx.redirectTo({//失败的话,重定向到页面中,并且携带miniType参数和result参数
  13. url: '../index/index?url=https://www.hxkj.vip?miniType=mini&result=' + res
  14. })
  15. },
  16. error: function(res) { //扫码失败的回调函数
  17. console.log("调用失败:" + res)
  18. var scanState = res.errMsg;
  19. var scanType = res.scanType;
  20. var scanResult = res.result;
  21. wx.redirectTo({//失败的话,直接重定向到页面,并且不带任何参数
  22. url: '../index/index?url=https://www.hxkj.vip/'
  23. })
  24. },
  25. fail: function(res) {//取消扫一扫
  26. var scanState = res.errMsg;
  27. var scanType = res.scanType;
  28. var scanResult = res.result;
  29. //弹框提示信息
  30. wx.showToast({
  31. title: '取消扫描',
  32. icon: 'none',
  33. duration: 2000,
  34. success: function () {
  35. }
  36. })
  37. }
  38. })
  39. }, 400);
  40. },

特别注意setTimeout函数,如果不使用该方法进行延迟调用,在IOS系统中100%无法调起扫一扫,应该算是微信小程序的BUG,至于延迟多少,就自行测试了,这边延迟500ms。

2.1、扫码成功的回调处理:重定向到页面中,并且携带miniType参数和result参数

miniType:用于区分是否为扫码返回,如果url有该参数则获取result结果,如果url没有该参数,则不做任何操作。result:扫码返回结果

2.2、扫码失败的回调处理:直接重定向到页面,并且不带任何参数

。。。。。未完待续

参考文档:

点我icon-default.png?t=M276https://blog.csdn.net/ycb1689/article/details/94165675

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/389510
推荐阅读
相关标签
  

闽ICP备14008679号