赞
踩
webview嵌套H5页面,然后H5点击调用小程序的扫一扫,然后通过改变webview的路径带参数的方式将扫描结果返回到H5页面来实现
。- $('.clickJump').on('click', function () {
- openWXSYS("/abc.html?CH1=" + escape(escape(escape(aaa))) + "&CH2=" + escape(escape(escape(bbb))));
- });
- //微信小程序封装地址=/pages/scanCode/scanCode
- function openWXSYS(callBackUrl) { //打开微信扫一扫,callBackUrl在微信小程序中获取参数
- var url = '/pages/scanCode/scanCode?callBackUrl=' + callBackUrl;
- goMicroMessengerPage(url);
- };
- goMicroMessengerPage = function (url) {
- var ua = window.navigator.userAgent.toLowerCase();
- if (ua.match(/MicroMessenger/i) == 'micromessenger') { // 判断是否是微信环境
- // 微信环境,如果不是Vue导入方式,需要写成window.wx.miniProgram.getEnv()
- wx.miniProgram.getEnv(function (res) {
- if (res.miniprogram) {
-
- wx.miniProgram.navigateTo({
- url: url,//小程序地址
- success: function () {
- console.log("调用成功!")
- },
- fail: function () {
- alert("调用失败");
- wx.showToast({
- title: '调用小程序失败!',
- icon: 'none'
- })
- }
- });
-
-
- } else {
- console.log('不在微信环境中,无法调用微信小程序!');
- }
- })
- } else {
- console.log('不在微信环境中,无法进行调用微信小程序!');
- }
- "pages": [
- "pages/scanCode/scanCode", //添加扫一扫页面
- ],
- onLoad: function(options) {
- console.log(this.options)
- var that = this;
- var callBackUrl = options.callBackUrl; //回调地址
- if (callBackUrl !== "" && callBackUrl != null && callBackUrl != undefined) {
- callBackUrl = unescape(callBackUrl);
- this.setData({
- callBackUrl: callBackUrl
- })
- }
- that.wxScanCode();
- // 调用地址
-
- },
- wxScanCode: function() {
- var that = this;
- var callBackUrl = this.data.callBackUrl;
-
- //兼容ios微信无法立即调起扫一扫
- setTimeout(function() {
- wx.scanCode({ //调用扫一扫
- success: function(res) { //扫码成功的回调函数
- console.log("调用成功:" + res)
- var scanState = res.errMsg;
- var scanType = res.scanType;
- var scanResult = res.result; //二维码的内容
-
- wx.redirectTo({//失败的话,重定向到页面中,并且携带miniType参数和result参数
- url: '../index/index?url=https://www.hxkj.vip?miniType=mini&result=' + res
- })
-
-
-
- },
- error: function(res) { //扫码失败的回调函数
- console.log("调用失败:" + res)
- var scanState = res.errMsg;
- var scanType = res.scanType;
- var scanResult = res.result;
-
-
- wx.redirectTo({//失败的话,直接重定向到页面,并且不带任何参数
- url: '../index/index?url=https://www.hxkj.vip/'
- })
-
-
- },
- fail: function(res) {//取消扫一扫
- var scanState = res.errMsg;
- var scanType = res.scanType;
- var scanResult = res.result;
-
- //弹框提示信息
- wx.showToast({
- title: '取消扫描',
- icon: 'none',
- duration: 2000,
- success: function () {
-
- }
- })
-
-
- }
- })
- }, 400);
- },
特别注意setTimeout函数,如果不使用该方法进行延迟调用,在IOS系统中100%无法调起扫一扫,应该算是微信小程序的BUG,至于延迟多少,就自行测试了,这边延迟500ms。
2.1、扫码成功的回调处理:重定向到页面中,并且携带miniType参数和result参数
miniType:用于区分是否为扫码返回,如果url有该参数则获取result结果,如果url没有该参数,则不做任何操作。result:扫码返回结果
2.2、扫码失败的回调处理:直接重定向到页面,并且不带任何参数
。。。。。未完待续
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。