在真机上跑的时候,启动参数改变后,getLaunchOptionsSync不能读取新的启动参数。场景是这样的,两个手机的微信的版本号都是7.0.4,上面各有一个微信号(假定分别是A和B)登录,先在A上跑了我们的小程序(是用一些启动参数启动的,有特定的path、query什么的。),然后转发给B,希望B完成某项任务。B从转发中打开了小程序,完成了任务,然后转发回A(带了一些新的启动参数,新的path、新的query什么的。)。这个时候A上我们的小程序一直没有关,还在后台。那这个时候B给A转发回了小程序,A点开这个转发,在程序里调用getLaunchOptionsSync,得到的还是原先的启动参数。只有手动把小程序关了,再点开刚才那个转发,才能得到新的参数。
这当然是不合理的!!!!!!!!!!!
我也遇到类似的问题,不过我不是为了拿query,而是为了拿场景值。
app分享pageA给用户,用户打开pageA,拿到场景值1036,同时分享出去pageB,然后用户再自己打开pageB,发觉场景值还是1036(根据api应该是1007)。 也是用的getLaunchOptionsSync() 。
原因分析:
1.用户打开pageA,分享pageB后打开,pageA并没有杀死,pageB拿到的还是pageA的启动参数。
所以,这getLaunchOptionsSync()就是个严重不合理的东东。。。Sync不就是同步的意思。为嘛没做到同步效果
这样处理毕竟并没有处理好。原因:
1、从转发进入小程序,只应该被执行一次,而onAppShow是前后台切换,可能有多次;把只应执行一次的逻辑放在可能被执行多次的场景下,不合适。
2、问题的根源是因为如果已经有同一个小程序的实例,再从转发进入小程序时,因重用一个实例而导致转发链接中包含的路径和参数信息丢失;我觉得合理的设计应该是,要么允许两个实例同时存在,要么丢弃之前实例的路径和参数信息,保留当前进入的场景路径以及参数
请参考文档:
https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html
onLaunch(Object object)
小程序初始化完成时触发,全局只触发一次。参数也可以使用 wx.getLaunchOptionsSync
获取。
所以,小程序初始化只有一次的情况下(没被杀掉的情况下),无论
多少次,结果都是一样的。wx.getLaunchOptionsSync