首次扫描普通二维码打开小程序onLoad获取参数为undefined的问题

使用普通二维码打开小程序的场景,主要是为了记录是用户都是扫描哪一个二维码进入的。

1. 配置扫普通链接二维码打开小程序

打开微信公众平台 > 开发管理 > 开发设置 > 添加普通二维码地址
在这里插入图片描述

2. 配置二维码跳转规则

详细内容参照官方文档

3. 二维码内容获取(重点)

下面是官方文档中给出的代码示例

Page({
  onLoad(query) {
    const q = decodeURIComponent(query.q) // 获取到二维码原始链接内容
    const scancode_time = parseInt(query.scancode_time) // 获取用户扫码时间 UNIX 时间戳
  }
})

在扫码跳转小程序成功后,onLoad函数中可以接收到二维码中的内容
例如,二维码中内容为:https://www.qq.com/a/?id=123
则在小程序中的query.q的值为:https%3A%2F%2Fwww.qq.com%2Fa%2F%3Fid%3D123
使用decodeURIComponent解码后得到原来的数据。

但是
在测试中发现,首次扫码打开小程序后,query的值为undefined,当切换小程序到后台之后重新扫码,之后的query的值均是二维码中的内容。

解决方法
const q = decodeURIComponent(query.q)修改成以下内容,此时options.q的值就是为二维码中的内容

var pages = getCurrentPages();
var page = pages[pages.length - 1];
const options = page.options;

完整代码

Page({
  onLoad(query) {
    var pages = getCurrentPages();
    var page = pages[pages.length - 1];
    const options = page.options; // 获取到二维码原始链接内容
    const scancode_time = parseInt(options.scancode_time) // 获取用户扫码时间 UNIX 时间戳
  }
})

你可能感兴趣的:(小程序,小程序,js,微信小程序)