业务场景: web-view 组件套h5页面,h5页面中有部分功能是需要登录才能操作的。每次登录完后,通过wx.navigateBack回到h5中,由于一开始没有token,登录后多了个token。导致 web-view页面的src更新了,要返回到web-view页面的上级页面时,需要点击两次返回按钮。
问题原因: 由于web-view页面有很多内部跳转的需求,所以推测微信团队基于路由及参数变化加了一层拦截,路由变化了就通过一个临时栈记录下来,每次点击返回按钮就一层层返回。
尝试方案:
- 首页业务场景不支持在h5中直接重定向到登录页,因为用户在登录页的时候可能不登陆直接返回继续浏览。
- web-view的src清空,包括加上wx:if都是没有用的,wx:if还会报错,没办法重置当前页面。
- 登录后重定向,由于登录页有返回的需求,所以正常的逻辑应该是回退两次,再重新打开新页面,暂时没有相应的api。
- 在h5中监听浏览器的返回事件,但是由于页面内部可以打开二级甚至三级页面,web-view页面有很多内部跳转,所以也不适用。
个人建议:
web-view组件分两个参数:
一个是刷新页面相关的,这个参数变更了后就加入页面临时栈,每次点击返回按钮就一层层返回。
第二个是页面基础的数据,这部分数据参数变更后web-view页面只负责传递,不要加入页面临时栈。
或者
web-view组件抛出返回事件,让用户自定义处理
当然以上全是个人猜想,如果有说的不对的地方欢迎大家指正。有好的解决思路也欢迎大家一起讨论!