options.scene="a=1&b=2&c=3"; if (isNaN(options.scene)) { var jsonStr = options.scene; var json = decodeURIComponent(jsonStr); let arr = json.split("&"); //先通过?分解得到?后面的所需字符串,再将其通过&分解开存放在数组里 let obj = {}; for (let i of arr) { obj[i.split("=")[0]] = i.split("=")[1]; //对数组每项用=分解开,=前为对象属性名,=后为属性值 } console.log(obj); }
微信的文档就像是sb写的一样
base64加密后传入
根本看不懂文档
生成的小程序二维码,参数:scene=shop=382number=3, 用wx.scanCode()扫;有些手机扫出来内容,scene=shop%3D382%26number%3D3,有些手机scene=shop=382number=3(国美手机)。
可以用a到z中妳没有用到的字母来替换=和& 比如 =用c替换&用y替换
同问
我实在开发工具中设置的编译模式,携带了启动参数 scene
官方文档有这么一句:
我在app.js中的onLunch里面获取到了这个传递的参数
有两个 scene
我猜测着两个scene(一个是二维码的scene,一个是场景值scene)
query中的scene是二维码携带的。
不知道对不对
在编译工具“普通编译”下拉框里选择“快速二维码”编译,然后选择你生成的小程序二维码就可以模拟扫码了。比如二维码中的scene传入的参数为a=1,则扫码后在相关页面的onload里通过options.scene就可以获取到了。获取到的值就是a=1
onLoad(options) {
//测试打印二维码传入的值
console.log(decodeURIComponent(options.scene));
在首页文件onLoad方法中可以这么写
onLoad(query){ const scene = decodeURIComponent(query.scene) console.log(scene) //"a=100&b=200" }
然后解析scene字符串就可以了,开发工具和真实环境获取的值还不大一样,坑
在 app.js onLaunch 可以获取到,
onLaunch: function (options) { console.log(options); const scene = decodeURIComponent(options.query.scene); console.log(scene); }
传参格式:
启动参数:scene= lid%3D631431%26areaid%3D3
字符转换 :
= %3D & %26
这样写可以获取参数了 ,但是页面并没有根据这个参数跳转?!请问这样是否正确 接下来应该怎么用???!
// 文档nt,所以我双层判断😭(taro typescript)
static setShareUserId(launchQuery: any): void {
console.debug('launchQuery', launchQuery)
// 有些手机scene=shop=382number=3
if (launchQuery.shareUserId) {
Taro.setStorage({ key: 'shareUserId', data: launchQuery.shareUserId })
return
}
// 手机不会转换,scene=shop%3D382%26number%3D3
if (launchQuery.scene) {
const query = JSON.parse(
'{"' +
decodeURI(
decodeURIComponent(launchQuery.scene)
.replace(/&/g, '","')
.replace(/=/g, '":"')
) +
'"}'
)
if (query.shareUserId) {
Taro.setStorage({ key: 'shareUserId', data: query.shareUserId })
}
}
}
您好,这个问题解决了吗?
if (isNaN(options.scene)) {
var jsonStr = options.scene;
var json = decodeURIComponent(jsonStr);
let arr = json.split("&"); //先通过?分解得到?后面的所需字符串,再将其通过&分解开存放在数组里
let obj = {};
for (let i of arr) {
obj[i.split("=")[0]] = i.split("=")[1]; //对数组每项用=分解开,=前为对象属性名,=后为属性值
}
console.log(obj);
}