uni-app 连续返回导致无法点击
uni-app 连续返回导致无法点击
bug描述:
因项目涉及隐私,无法贴代码、图片。 视频我已经发给uni-im的管理。 我举一个小李子: 我在uniapp中有3个页面,分别是A、B、C。其中A点击按钮跳转B,B点击按钮跳转C,C是一个webview页面,C返回B没有问题,页面正常操作(点击B页面按钮、操作数据、返回上一页都没问题),但是C返回B后,B页面中有一个onshow事件,事件监听到webview返回传递的消息会返回上一个页面A,那么A就出问题了,A页面无法点击,任何操作都不行,需要等待10秒左右。
项目信息 | 详细信息 |
---|---|
产品分类 | uniapp/小程序/微信 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | win11 家庭中文 |
HBuilderX类型 | 正式 |
HBuilderX版本号 | 4.57 |
第三方开发者工具版本号 | 2412050 |
基础库版本号 | 3.7.11 |
项目创建方式 | HBuilderX |
更多关于uni-app 连续返回导致无法点击的实战教程也可以访问 https://www.itying.com/category-93-b0.html
提供下 vue 版本,说明是 cli 还是 HBuilderX 项目。说明下 a - b - c 是 navigateTo 吗。 b 的 onShow 代码具体贴一下。webview 传递的是什么。你新建一个空白工程做个说明吧。
更多关于uni-app 连续返回导致无法点击的实战教程也可以访问 https://www.itying.com/category-93-b0.html
a跳b、b跳c都是使用navigateTo,c是webview页面,小程序只有在特定的事件才能通过webview回调消息,所以我使用了jWeixin.miniProgram.navigateBack(app端我使用uni.navigateBack),返回层级是1,这样c就回到了b页面,b页面我在onshow中判断了c是否传递参数过来的,如果传递了参数,那么直接返回上一次,也还是使用 uni.navigateBack。结果就是上面说的无法点击,小程序无法点击,安卓是白屏2秒左右后(无法点击好像,具体我忘记了),如果在b页面即使收到参数也不返回,那么就没问题。全程可以不需要参数,没必要传参数,只是业务需要传了参数,我测试了不穿参数一样的效果。
回复 8***@qq.com: 看下我的回复,说明 vue 版本,具体代码贴一下,给一个复现工程。提供更多信息,有助于定位和解答你的问题。
这是一个典型的页面生命周期管理问题。从描述来看,主要问题出在B页面的onShow事件处理逻辑上。
当从C返回B时,B的onShow事件触发并立即执行了返回A的操作,这会导致页面栈管理混乱。建议检查以下方面:
-
B页面的onShow事件中是否有立即执行uni.navigateBack()的逻辑?这种快速连续返回容易导致页面渲染阻塞。
-
可以尝试在onShow中加入延迟执行:
onShow() {
setTimeout(()=>{
uni.navigateBack()
}, 300)
}
- 或者考虑改用页面通信方式代替直接返回:
// B页面
onShow() {
const pages = getCurrentPages()
if(pages.length > 1) {
const prevPage = pages[pages.length - 2]
prevPage.$vm.handleWebviewMsg(data) // 将消息传递给A页面处理
uni.navigateBack()
}
}