小程序报错WebviewId xxx not found
在Android真机环境下测试时出现一下错误:OnWebviewEvent: … WebviewId xxxx not found,而且页面也不进行跳转,而且该页面所有按钮点击时候都会报错:页面中不存在对应事件。
错误分析:
- 小程序页面场景:
启动之后根据用户状态判断用户要进入哪个页面,其中有一套页面时Tabbar页面。
根据小程序API,普通页面跳转用redirectTo();Tabbar页面切换使用switchTab();
- 解决过程
1. 页面场景切换导致的问题,首先到开发文档中找到小程序的页面生存周期
对照业务流程,插入调试点测试,页面正常执行,但是小程序后台再到前台页面不进行任何跳转,也没有任何动作。
无从下手!
2. 非正常问题用非正常思路。
测试另一组非tabbar页面后台再到前台能不能正常跳转,实际测试发现可以正常执行,也能正常跳转。
所以很大可能就是switchTab这里存在问题。
3. 官方文档中是这么描述的
好像也没什么毛病。那就到小程序基础库的源代码找找看。
但是,加代码混淆的压缩代码,实在是难以深究。只好跟踪梳理WAServer.js文件,找出这个异常是由onPageReload方法抛出的。是App生命周期的一个函数,这样也正好解释了为什么小程序放入系统后台,重新进入会出现这个问题。
- 问题不能直接解决,暂时只能跳过问题解决了。
页面跳转一共有navigateTo、redirectTo、reLaunch、switchTab、navigateBack,五个接口,同时
1 |
wx.navigateTo 和 wx.redirectTo 不允许跳转到 tabbar 页面,只能用 wx.switchTab 跳转到 tabbar 页面 |
所以要进入tabbar的一套页面可以尝试使用reLaunch接口实现。
- 测试reLaunch接口能不能解决问题。
替换原来的switchTab方法,重复刚才出错的应用场景,发现问题不再复现。
暂时解决了这个问题,但从根本上解决还需要等下一班基础库更新了。
用reLaunch替换switchTab可以减少出现问题的概率,但不能杜绝。
目前我这块没有看到这个问题的复现,一个是用了最新的基础库,还有就是使用setTimeout给这个跳转加了200ms延迟。