记录一下这个问题,因为我已经第二次到这个坑了,之前遇到竟然忘记了,我的天!(因为第二次是用开发工具debug了很久才找到这个问题)
(一)问题情况:
在某个页面点击上传图片或上传视频的接口:wx.chooseImage或wx.chooseVideo;选中之后会出现当前页面刷新或跳转其他页面问题;
(二)问题分析:
当前页面点击调用wx.chooseImage或wx.chooseVideo之选中后,会触发当前页面js的onHide函数、app.js的onHide函数、app.js的onShow函数、当前页面js的onShow函数(注意执行的顺序,如下图);有点悲催的是:会出现这个问题,官方文档接口那里竟然没有说明!很无奈呀~
所以,在以上四个函数里面有写判断逻辑的,比如小程序打开判断缓存里登录情况来跳转注册页还是首页的或其他处理等,就会出现问题了。
(三)解决方法:
在上面说的四个函数里,需要处理逻辑的,添加个判断页面栈长度就可以再来处理相关逻辑就可以了;
比如:
//app.js onShow: function () { let _currentPagesLength = getCurrentPages(); //当前页面栈路由 if (wx.getStorageSync( "sid" )) { //判断用户登录缓存key是否存在 if (_currentPagesLength.length == 0) { //小程序刚打开,页面路由为空,跳转到首页 wx.switchTab({ url: '/pages/index/index' , }) } } else { //自动跳转到app.json第一个页面 console.error( '用户没有登录' ); } }, |
希望能帮到你~(欢迎您提供更好的解决方法或指教)
其实跳出了小程序环境都会有这个问题吧,转发也有吧
这个我们监测debug不到这些底层的原理流程,难说,不过平时开发没出现问题并没有太在意,我等下试一下,看看是不是小程序环境的问题还是调用接口底层的问题呢
测试过事实证明,如你所说,只要是跳出小程序环境就会有这个问题,转发也有,搞不懂官方怎么不说明呢,很明显的一个问题,一不注意就会出错的。
让我想起以前做cordova的开发,也会有一样的问题
谢谢,长见识了
请问有没出现这种问题,a页面wx.chooseImage后跳转到wx.navigateTo另一个页面b,执行顺序会变成b页面onShow,a 页面reload,b页面onUnload,a页面onShow