- 在页面 mall.vue 中放置一个 web-view 组件。
- 操控 web-view 内部网页从 网页1 点击跳转到 网页2。
- 在 mall.vue 中通过自定义按钮或事件强行执行以下代码准备离场:
const currentPage = getCurrentPages().pop(); const currentWebview = currentPage?.$getAppWebview?.(); currentWebview.close('none'); - 紧接着或者在下一页面尝试执行 uni.navigateBack()。
- 观察控制台报错及真机表现。
- 发布:2026-06-30 15:31
- 更新:2026-06-30 15:31
- 阅读:31
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: 11
HBuilderX类型: 正式
HBuilderX版本号: 5.07
手机系统: HarmonyOS NEXT
手机系统版本号: HarmonyOS 6.0.0
手机厂商: 华为
手机机型: Mate60
页面类型: vue
vue版本: vue3
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
框架应当提供一种不依赖 v-if 的纯 JS 方案(或修复原生 close 的同步机制),在关闭 native 视图的同时,安全地执行类似 removePage 的生命周期,正确清理 getCurrentPages() 页面栈,不引发路由死锁。
框架应当提供一种不依赖 v-if 的纯 JS 方案(或修复原生 close 的同步机制),在关闭 native 视图的同时,安全地执行类似 removePage 的生命周期,正确清理 getCurrentPages() 页面栈,不引发路由死锁。
实际结果:
控制台抛出严重崩溃:
TypeError: null is not an object (evaluating 'e.children')
并且该 Vue 页面之前的页面再也无法使用 uni.navigateBack 了,手机物理返回键、屏幕边缘侧滑返回手势全部失效。
控制台抛出严重崩溃:
TypeError: null is not an object (evaluating 'e.children')
并且该 Vue 页面之前的页面再也无法使用 uni.navigateBack 了,手机物理返回键、屏幕边缘侧滑返回手势全部失效。
bug描述:
在鸿蒙端 App 中,Vue 页面内部使用了 web-view 组件。当用户在 web-view 内部进行了多级页面跳转(网页1 -> 网页2)后,此时如果想要直接关闭当前 Vue 页面回到上级,会陷入以下两难死循环:
• 如果调用 uni.navigateBack(),会被框架拦截,表现为在 web-view 内部网页后退,而不是关闭 Vue 页面。
• 如果通过底层 API 强行调用 const currentPage = getCurrentPages().pop();const currentWebview = currentPage?.$getAppWebview?.();currentWebview.close('none'),界面虽然消失,但 JS 层的页面栈(getCurrentPages())依然残留该页面。
• 核心Bug:在上述强行 close 产生幽灵页面栈后,紧接着触发 uni.navigateBack(),或者用户点击手机物理返回键、使用侧滑返回手势时,App 会直接抛出未捕获的运行时异常:TypeError: null is not an object (evaluating 'e.children')。随后整个 App 的全局路由锁死,后续所有页面跳转、物理返回键、手势返回全部永久失效,应用彻底瘫痪。
0 个回复