你们的重大bug:getLaunchOptionsSync不能读取新的启动参数
发布于 6 年前 作者 fzhong 5455 次浏览 来自 问答

在真机上跑的时候,启动参数改变后,getLaunchOptionsSync不能读取新的启动参数。场景是这样的,两个手机的微信的版本号都是7.0.4,上面各有一个微信号(假定分别是A和B)登录,先在A上跑了我们的小程序(是用一些启动参数启动的,有特定的path、query什么的。),然后转发给B,希望B完成某项任务。B从转发中打开了小程序,完成了任务,然后转发回A(带了一些新的启动参数,新的path、新的query什么的。)。这个时候A上我们的小程序一直没有关,还在后台。那这个时候B给A转发回了小程序,A点开这个转发,在程序里调用getLaunchOptionsSync,得到的还是原先的启动参数。只有手动把小程序关了,再点开刚才那个转发,才能得到新的参数。

这当然是不合理的!!!!!!!!!!!

5 回复

我也遇到类似的问题,不过我不是为了拿query,而是为了拿场景值。

app分享pageA给用户,用户打开pageA,拿到场景值1036,同时分享出去pageB,然后用户再自己打开pageB,发觉场景值还是1036(根据api应该是1007)。 也是用的getLaunchOptionsSync() 。

原因分析:

1.用户打开pageA,分享pageB后打开,pageA并没有杀死,pageB拿到的还是pageA的启动参数。

所以,这getLaunchOptionsSync()就是个严重不合理的东东。。。Sync不就是同步的意思。为嘛没做到同步效果

请问这个问题解决了吗? 碰到类似的问题:扫码进入,第二次二维码的参数和第一次不一样,但是只能取到第一次启动的参数,按接口名sync理解,应该同步第二次的参数才对。 或者有什么解决方案吗?

这样处理毕竟并没有处理好。原因:

1、从转发进入小程序,只应该被执行一次,而onAppShow是前后台切换,可能有多次;把只应执行一次的逻辑放在可能被执行多次的场景下,不合适。

2、问题的根源是因为如果已经有同一个小程序的实例,再从转发进入小程序时,因重用一个实例而导致转发链接中包含的路径和参数信息丢失;我觉得合理的设计应该是,要么允许两个实例同时存在,要么丢弃之前实例的路径和参数信息,保留当前进入的场景路径以及参数

请参考文档:

https://developers.weixin.qq.com/miniprogram/dev/reference/api/App.html

onLaunch(Object object)

小程序初始化完成时触发,全局只触发一次。参数也可以使用 wx.getLaunchOptionsSync 获取。

所以,小程序初始化只有一次的情况下(没被杀掉的情况下),无论wx.getLaunchOptionsSync 多少次,结果都是一样的。

这个问题很久了的、、

点开转发的小程序,要在某个时机手动清空状态

回到顶部