uni-app 【已解决】 疑似使用 this.$scope.$getAppWebview().close() 关闭页面的 bug
uni-app 【已解决】 疑似使用 this.$scope.$getAppWebview().close() 关闭页面的 bug
| 开发环境 | 版本号 | 项目创建方式 |
|---|---|---|
| PC | Windows | HBuilderX |
| 手机 | Android | |
| Android 11 | ||
| 厂商 | SONY | |
| 机型 | Xperia 1 J9110 |
产品分类:uniapp/App
操作步骤:
- 在第一个页面导航到第二个页面
uni.navigateTo({ url: '/pages/second' }) - 在第二个页面导航到第三个页面
uni.navigateTo({ url: '/pages/third' }) - 在第三个页面上监听
onBackPress()并return true阻止返回,弹窗确认后关闭页面export default { name: 'third', onBackPress() { uni.showModal({ title: '确定返回?', success(e) { if (e.confirm) _this.$scope.$getAppWebview().close() } }) return true // 阻止返回 } } - 回到第二个页面后使用同样的步骤
export default { name: 'second', onBackPress() { uni.showModal({ title: '确定返回?', success(e) { if (e.confirm) _this.$scope.$getAppWebview().close() } }) return true // 阻止返回 } }
更多关于uni-app 【已解决】 疑似使用 this.$scope.$getAppWebview().close() 关闭页面的 bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
刚发现在第二个页面中按返回出现的弹窗居然是第三个页面的弹窗!
肿摸破???
更多关于uni-app 【已解决】 疑似使用 this.$scope.$getAppWebview().close() 关闭页面的 bug的实战教程也可以访问 https://www.itying.com/category-93-b0.html
销毁一个页面并非只关闭 webview 即可,还有很多工作要做。推荐使用封装好的 API:uni.navigateBack。自己增加一个状态来识别是否真的需要后退。
已通过判断 onBackPress({ from }) 中的 from 是否是 backbutton 然后用 uni.navigateBack() 实现了,感谢回复
_this是哪里定义的?
根据你的描述,这是一个典型的页面栈管理问题。this.$scope.$getAppWebview().close() 直接关闭了当前 Webview,但并未正确更新 uni-app 内部的页面栈状态。
问题分析:
- 当你在第三个页面调用
close()时,该 Webview 被销毁,你回到了第二个页面。 - 此时 uni-app 的页面栈记录仍然是
[第一页, 第二页, 第三页],但实际显示的已经是第二页。 - 当你在第二页再次调用
close()时,销毁的是第二个页面的 Webview。 - 由于页面栈状态不一致,应用可能直接退出或出现异常。
解决方案: 使用 uni-app 的标准 API 来管理页面导航:
// 替代 this.$scope.$getAppWebview().close()
uni.navigateBack({
delta: 1
})
在 onBackPress 中的完整实现:
export default {
onBackPress() {
uni.showModal({
title: '确定返回?',
success: (e) => {
if (e.confirm) {
// 使用标准导航API
uni.navigateBack({
delta: 1
})
}
}
})
return true
}
}

