在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1

在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1 产品分类:uniapp/App
PC开发环境操作系统:Windows
PC开发环境操作系统版本号:win10
手机系统:iOS
手机系统版本号:iOS 18
手机厂商:苹果
手机机型:iphone12mini
页面类型:vue
vue版本:vue3
打包方式:离线
项目创建方式:CLI
CLI版本号:5.0.8

操作步骤: A页面:

uni.navigateTo({url:'B'})

B页面:

uni.navigateTo({url:'C'})

C页面

uni.relaunch({url:'D'})

D页面:

onshow(() => {
    const pages = getCurrentPages()
    console.log(pages.length)
})

预期结果:

期望console.log中打印得到页面堆栈长度是1

实际结果:

实际console.log中打印得到页面堆栈长度是4

更多关于在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

它 好像 不是 立刻 就 销毁 其他 页面的,
你可以加个 setTimeout 试试看 , 延迟个 1秒啥的, 应该 长度 就是1了,
我是在 url 加上了 标志位, 标志 是否是 reLaunch ,
uni.reLaunch({
url: “/pages/dxd/dxd?reLaunch=1”
})

更多关于在uni-app中IOS使用uni.relaunch跳转页面在目标页面的onshow中打印当前页堆栈不是1的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,iOS平台使用uni.relaunch跳转时出现页面堆栈未重置的问题,这是因为iOS平台的实现机制导致的。relaunch本应关闭所有页面并打开新页面,但在iOS上可能存在堆栈未完全清除的情况。

解决方案:

  1. 使用setTimeout延迟获取页面堆栈:
onShow(() => {
    setTimeout(() => {
        const pages = getCurrentPages()
        console.log(pages.length) // 此时应该为1
    }, 100)
})
  1. 或者使用uni.reLaunch替代(注意大小写):
uni.reLaunch({url: 'D'})
  1. 也可以在D页面的onLoad生命周期中获取堆栈:
onLoad(() => {
    const pages = getCurrentPages()
    console.log(pages.length)
})

这个问题主要是iOS平台实现上的差异,建议使用上述方法之一来解决。如果仍有问题,可以考虑在跳转前手动关闭所有页面:

// 在C页面
const pages = getCurrentPages()
pages.forEach(page => {
    if (page.route !== 'pages/C/C') {
        uni.navigateBack({delta: 1})
    }
})
setTimeout(() => {
    uni.reLaunch({url: 'D'})
}, 300)
回到顶部