uni-app HbuilderX4.3.1 版本使用getCurrentPages()方法闪退

发布于 1周前 作者 vueper 来自 Uni-App

uni-app HbuilderX4.3.1 版本使用getCurrentPages()方法闪退

操作步骤:

  • 调用getCurrentPages()方法

预期结果:

  • 预期能和其他端一样正常返回

实际结果:

  • 会导致APP闪退

bug描述:

  • 在本地运行鸿蒙真机系统中,调用getCurrentPages()方法,会导致应用闪退

| 项目信息         | 信息内容       |
|------------------|----------------|
| 产品分类         | uniapp/App     |
| PC开发环境操作系统 | Windows        |
| PC开发环境操作系统版本号 | 22631.4317     |
| HBuilderX类型    | Alpha          |
| HBuilderX版本号  | 4.31           |
| 手机系统         | HarmonyOS NEXT |
| 手机系统版本号    | HarmonyOS NEXT Developer Preview |
| 手机厂商         | 华为           |
| 手机机型         | Mate60 Pro     |
| 页面类型         | vue            |
| vue版本          | vue3           |
| 打包方式         | 云端           |
| 项目创建方式      | HBuilderX      |

7 回复

您好,请上传一个最小的可复现的 demo 至附件,我们会进行排查。构建最小可复现 demo 时,可以参考以下步骤: 定位问题:首先找到出现问题的代码,从这里开始,分析代码的上下文逻辑,提取出最简那段代码,可以使用二分法等方式。 调试代码:之后需要使用调试工具,例如console 或者断点,检查代码的执行过程是否可以正确命中代码段并复现问题。 添加必要的依赖:最后,如果你的代码依赖于外部库或者框架,确保你构建的最小的可复现 demo 包含必要的依赖,并且去掉没用的依赖。 完成之后参照下方上传到评论区。 上传方式:将 demo 压缩成 zip 之后在底部回复框中点击上传附件,并且需要在输入框中给出如何操作可以复现 bug。 感谢您的支持,这非常有助于我们复现与修复问题。


Timestamp:2024-11-04 11:54:01.513 Pid:24434 Uid:20020010 Process name:com.example.test.template Process life time:57s Reason:Signal:SIGSEGV(SEGV_MAPERR)@0x000000227f7ba300

调用getCurrentPages()方法,DevEco Studio开发工具中会报这个错误

发现并不是调用的时候闪退,是console的时候闪退的,可以先忽略吧

1、先通过pnpm安装依赖后,在页面中点击登录按钮即可复现

再鸿蒙模拟器上调用getCurrentPages()报错: TypeError: Cannot convert a illegal value to a Primitive
hx版本4.29
什么原因啊?是还不支持嘛?

在uni-app中使用getCurrentPages()方法时遇到闪退问题,通常是由于某些不当的操作或者兼容性问题引起的。getCurrentPages()方法主要用于获取当前页面栈的实例,通常用于跨页面传递数据或获取前一个页面的实例。在HBuilderX 4.3.1版本中,如果遇到闪退,可以尝试以下几种方法来解决或排查问题。

1. 检查调用时机

确保getCurrentPages()的调用是在页面加载完成后进行的,避免在页面初始化未完成时调用导致的问题。

onReady() {
    try {
        const pages = getCurrentPages();
        console.log('当前页面栈:', pages);
    } catch (error) {
        console.error('获取页面栈时出错:', error);
    }
}

2. 确认页面栈非空

在获取页面栈后,应检查是否为空,以避免对空数组进行操作导致的错误。

onReady() {
    try {
        const pages = getCurrentPages();
        if (pages.length > 0) {
            console.log('当前页面实例:', pages[pages.length - 1]);
        } else {
            console.warn('页面栈为空');
        }
    } catch (error) {
        console.error('获取页面栈时出错:', error);
    }
}

3. 避免跨平台差异

uni-app支持多端发布,确保在不同平台(如小程序、App、H5)上调用getCurrentPages()时,遵循各平台的规范。特别是小程序平台,对页面栈的管理可能有特定限制。

4. 更新uni-app及HBuilderX版本

考虑更新到最新的uni-app和HBuilderX版本,因为新版本可能已经修复了旧版本中的已知问题。

5. 排查其他JS错误

闪退有时可能由其他JS错误引起,通过控制台日志(Console Log)检查是否有其他错误输出,并进行修复。

6. 使用try-catch捕获异常

如示例中所示,使用try-catch结构捕获可能的异常,避免程序因未捕获的异常而闪退。

7. 查阅官方文档及社区

查阅uni-app官方文档及相关社区(如DCloud论坛),看是否有其他开发者遇到并解决了类似问题。

通过上述方法,你应该能够定位并解决在uni-app中使用getCurrentPages()方法时遇到的闪退问题。如果问题依然存在,建议详细记录错误日志,并在开发社区寻求更专业的帮助。

回到顶部