问题描述
在开发过程中,有个跳转需求,具体实现需要在article模块,即文章详情页模块,跳转到home模块,即首页模块。在这之中需要带上参数,由于home是属于tabbar配置中的一部分,所以无法用url传参的方式直接传递参数,于是我想到了用获取全局唯一对象getApp()这个方法。 给app赋值上全局变量,然后在home模块获取就行了。
但是问题来了。
本地测试调试通过后,发布到线上(由于是基于扫码跳转小程序,在编辑器只能通过修改编译场景来模拟扫码,实际扫码跳转只能到线上),发现一个奇怪的问题,那就是,在苹果端执行没问题,但是在安卓端会发现参数没有带过去。
解决思路
多次思考,既然代码是一样的,也都是线上的,同时暂时没有听说小程序有什么兼容的问题,只能自己一步步深究。
最终拿同事的安卓机,通过扫描编辑器生成的开发者二维码,模拟线上的场景,成功复现了BUG。那问题就简单了,既然能够复现,于是在各个地方打印了一下app对象的赋值情况信息。
一开始我是只在onLoad内对app对象赋值了一下,我以为全局变量只要赋值一次就够了(实际也应该是这样,苹果端运行没问题),结果在安卓端出了错,于是在onLoad,onShow,onReady都尝试打印赋值情况。
发现
在苹果端
onLoad内成功打印出信息,
onShow内成功打印出信息,
onReady成功打印出信息,
程序运行成功。结果如下:
在安卓端,
onLoad内成功打印出信息,
onShow内成功打印出信息,
但是onReady内打印出的信息为undefined
结果如下:
于是真相大白,对于某些安卓机型,会存在全局app对象赋值丢失的问题。。
这个问题还挺严重的,有反馈到官方问苹果端与安卓端的执行逻辑是不是不一样,但是没有人回复,只好在这里做一下记录。
找到问题所在后,解决就简单了,只要在最终调用跳转的部分,给app赋值就行了。
以上。祝各位爬坑成功。