我的小程序现在有这样的需求:用户点击公众号的菜单“我要报名”的按钮后,先跳转到小程序的首页,然后在小程序内通过web-view打开h5页面进行报名操作。
我的实现方法是,在设置公众号的菜单按钮跳转的小程序页面的路径带上一个参数,是一个url,即:
pages/index/index?url=https://h5.mypage.net(index是个tabbar界面)
我在模拟器设定了启动参数url=https://h5.mypage.net能够在index的onLoad options中获取得到url并成功跳转。
但是小程序上线后发现,正式版的小程序能获取url这个参数,但是跳转失败,即小程序只知道有url这个参数(因为已经navigateTo我的web-view),但是并没有url的参数内容(web-view访问的地址是404)
我在这篇文章得到了解答https://blog.csdn.net/shaleilei/article/details/80693326
即公众号跳转小程序的tabbar页带的参数是“无效的”
后来我是在index的onLoad里面通过wx.getLaunchOptionsSync().query成功获取到url
然而,我们的公众号有几个报名按键,我第一次按的报名按键能够成功获取url,但是如果我推出小程序,按其他报名按键,发现跳转的页面还是第一个报名按键制定的页面。那是因为,小程序推出后会在后台运行,如果我这时按其他报名按键,唤起小程序不会再次触发onLaunch,那么wx.getLaunchOptionsSync()拿到的还是上一次启动的参数,那就是上一个页面。
我觉得公众号跳转小程序tabbar页面的onLoad options不能获取参数是一个非常不合理的设定,我在网上找了很多网页都没有解决的办法。也有人提出同样的观点,这样的设定只有在开发者试错后才得知也是非常的无奈。两年前有人发现这个问题,但是这个问题一直存在,我只希望如果有解决方法的开发者能够给予一下帮助,谢谢。
写在app.js里的onShow(options)里
小程序的onshow方法 每次都会执行
遇到同样的问题了,请问怎么解决的?
onShow:
function
(options) {
console.log(
"onShow:"
, options);
this
.globalData.path = options.path;
this
.globalData.query = options.query;
this
.globalData.scene = options.scene;
},
app.js里面获取,然后设置成全局变量,在页面的onShow里面去判断就行了。
建议在 app.js的onLaunch 或者 onShow里 把query存内存(globalData.query)下。其他页面使用app.globalData.query.url获取。你试试~