各位做微信公众号h5开发的小伙伴肯定遇到各种坑,往往在开发者工具里验证是没问题,但是真机上测试的时候却各种bug,尤其在微信授权后,后端跳到前端,再次单击物理返回按钮的时候,往往会出现重复授权一直死循环,或者就是提示code错误;还有就是history里记录混乱,location.href明明可以使得history增加一条记录,但真机测试发现却没有……等等问题,往往在开发者工具里面都好好的,跑到真机就是各种错误,头疼不已,今天我就把我多日以来,刻苦实践才得来的完美解决方案告诉大家,相信一定能够帮到遇到相同问题的小伙伴。
首先介绍微信授权机制,如何组织流程才能让前后端交互更加合理,从而不至于在单击返回按钮时,出现反复授权无法退出的境地。
如上图所示,定义一个中转的专门页面,当微信授权后,以及单击返回按钮的时候,都会进入这个中转页面,从而由中转页面决定前进和后退的下页跳到哪里去; 另外,从打开前端页面,直至单击返回按钮之前,history的访问记录数,ios和android中分别是3 和 4。所以,单击返回按钮就是返回到专门页面,在改页面可以根据业务需要进行各种操作,例如关闭页面、返回进入公众号前端页面的上一个其他页面(流程里面的绿颜色的页面)。
其次,再来说下android物理返回按键的问题。
单击android物理返回按键,返回的上一个页面与实际history的历史记录不符,所以需要监听物理返回事件,参考网上的各种方案,都是在进入的页面里先用pushstate插入一条历史记录,然后再监听popstate,这样操作发现,单击物理返回按键并没有触发popstate事件,无论怎么修改就是不触发,百思不得其解,突然,无意中单击了下页面,再单击物理返回按钮,反而触发了popstate事件,上网搜了下,发现有其他小伙伴发现了这个问题,并且有人给了解决方案:developers.weixin.qq.com/community/d…
如上面这篇文档所示,只要在android设备打开的时候添加以下一段js即可解决这个奇葩的问题。
至此,基本上就解决了头疼已久的问题,希望能够帮到有同样问题的小伙伴。有不明白的小伙伴,评论区可以留言,我会一一解答。