<template>
<view><button @click="ttttttt">打开预加载页</button></view>
</template>
<script setup>
import { onReady } from '@dcloudio/uni-app'
const ttttttt = () => uni.navigateTo({ url: '/pages/test/test' })
onReady(() => uni.preloadPage({ url: '/pages/test/test' }))
</script>
<template>
<view><button @click="ttttttt">测试</button></view>
</template>
<script setup>
const ttttttt = () => {
console.log('onShow1')
console.log(uni.getDeviceInfo())
console.log(uni.getSystemInfoSync())
console.log('onShow2')
}
</script>
retrocode (作者)
没有测试其他端, 不过我测试发现nvue里预加载的页面的 onLoad 内 getCurrentInstance() 会报错 ReferenceError: getCurrentInstance is not defined ,
2025-06-09 18:17
retrocode (作者)
这是我今天适配 预加载时碰到的, 基本都是原nvue页面正常工作. 仅仅执行了预加载, 这些函数就不存在, 或者干脆报错了
2025-06-09 18:19
DCloud_UNI_LXH
回复 retrocode: 建议结合 onShow 生命周期来判断 onReady、onLoad 中的代码是否执行
2025-06-10 17:45
retrocode (作者)
回复 DCloud_UNI_LXH: 你好, 我上传了复现项目, 安卓使用标准基座就可以复现.
2025-06-12 09:18
retrocode (作者)
回复 DCloud_UNI_LXH: 你好, 如果NVUE停止维护了, 这个bug不打算修复的话, 能否告知一下大致是什么类的问题, 会影响哪些系统API, 我们这边想办法规避, nvue不开源我们也没法自己定位问题,
2025-06-16 10:20
DCloud_UNI_LXH
回复 retrocode: 应该是 preLoadPage 触发了 onLoad 等生命周期,生命周期中调用了 getSystemInfoSync,而 getSystemInfoSync 中调用了需要 page 初始化后才可用的内容,可以结合 onShow 和其他生命周期来判断是否执行相关逻辑。preLoadPage 会触发 onLoad,但是不会触发 onShow
2025-06-16 11:25
retrocode (作者)
回复 DCloud_UNI_LXH: 是这样的, 你可能没有理解我的意思, 我在楼下附件中上传了demo, 你实机跑一下就可以理解了, 主要问题就是, getSystemInfoSync 在预加载时的onload和onready 生命周期函数内是可以正常执行的,
但是真正打开页面后, 在页面内通过 onshow 或 手动点击按钮执行对应函数, 就会报错.
如果只是单纯的 onload时报错还好, 现在是只有onload时是好着的.
2025-06-16 15:40