uni-app nvue 的 vue3 版本 uni.getWindowInfo 报错
uni-app nvue 的 vue3 版本 uni.getWindowInfo 报错
示例代码:
uni.onWindowResize((res)=>{ uni.getSystemInfoSync() })
操作步骤:
在任意 nvue 调用
预期结果:
正常
实际结果:
报错
bug描述:
在 nvue 中调用 uni.getWindowInfo() 或 uni.getSystemInfoSync()
会报错
TypeError: e.$getAppWebview is not a function. (In ‘e.$getAppWebview()’, ‘e.$getAppWebview’ is undefined) __ERROR
之前用 4.28 不会出现这个问题
测试手机:
iphone 8 iOS 16.2
Android 12; ADY-AL10 Build/HUAWEIADY-AL10; wv)
开发环境与版本信息
项目创建方式 | PC开发环境操作系统 | PC开发环境操作系统版本号 | HBuilderX类型 | HBuilderX版本号 | 手机系统 | 手机系统版本号 | 手机厂商 | 手机机型 | 页面类型 | vue版本 | 打包方式 |
---|---|---|---|---|---|---|---|---|---|---|---|
HBuilderX | Mac | 13.5 (22G74) | Alpha | 4.44 | iOS | iOS 16 | 苹果 | iphone 8 | nvue | vue3 | 云端 |
nvue 不维护,也不要搞出错误,老项目怎么办
提供一个空白工程复现问题
回复 DCloud_UNI_OttoJi: 要用 uni.preloadPage({ url: “/pages/homenvue/homenvue”, success(){ console.log(‘页面预载成功’) }, fail() { console.log('页面预载失败 ') } }) ,我测试了,预加载的页面才会出现的
回复 工程狮: 给一个复现工程吧,也不麻烦搞一下,提供更多信息,有助于定位和解答你的问题。
回复 DCloud_UNI_OttoJi: 给我测试的一个项目功能,在上面问题的附件中
回复 工程狮: 我使用 HBuilderX alpha 4.45 运行你提供的代码到 iphone8,小米 13,代码正常,预加载正常,点击切换时候页面无变化,控制台无报错。你用最新的 alpha 4.45 测试一下
回复 工程狮: 私聊我吧
更新:经过测试 4.14/4.28 等几个HBuilderX 版本都有此问题,可能是一直都存在,问题出现在使用预加载页面,进入页面,旋转屏幕会出现 webview 查找失败的报错。问题会进一步排查,在此之前,建议避免预加载页面和屏幕旋转等逻辑同时使用。
也可以把逻辑放到 app.vue 里通过事件传递、或者状态管理进行维护
我使用下面代码运行到 vue3+ios 模拟器,点击按钮、旋转屏幕表现正常
<template>
<view>
<button @click=“systeminfo”>systeminfo</button>
</view>
</template>
你用的是 nvue 页面吗,vue页面正常
回复 工程狮: 是,你给我一个工程吧,补充报错截图或者报错日志,确保我们测试的是同一个问题
回复 工程狮: 请提供空白复现工程,并说明操作步骤
针对你提到的 uni-app
中 nvue
的 vue3
版本使用 uni.getWindowInfo
报错的问题,首先我们需要明确一点:nvue
和 vue
页面在 uni-app
中是两种不同的渲染引擎,nvue
使用的是 Weex 引擎,而 vue
页面使用的是 Vue.js 引擎。由于这种差异,一些 API 在两者之间的可用性可能会有所不同。
uni.getWindowInfo
是一个用于获取窗口信息的 API,它通常在 vue
页面中可以正常工作,但在 nvue
中可能不支持。如果你在 nvue
页面中使用 uni.getWindowInfo
并遇到了报错,那么很可能是因为这个 API 在 nvue
中不可用。
为了解决这个问题,你可以考虑以下几种方案:
-
检查文档和版本兼容性: 确保你使用的
uni-app
版本支持你正在使用的 API。查阅最新的uni-app
官方文档,确认uni.getWindowInfo
是否支持nvue
。 -
条件性使用 API: 在你的代码中,可以根据当前页面的类型(
vue
或nvue
)来决定是否调用uni.getWindowInfo
。例如:if (process.env.VUE_APP_PLATFORM === 'app-plus' && !process.env.TARO_ENV_NVUE) { // 仅在非nvue页面中使用 uni.getWindowInfo({ success: function (res) { console.log('窗口信息:', res); }, fail: function (err) { console.error('获取窗口信息失败:', err); } }); } else { console.warn('当前页面为nvue,不支持uni.getWindowInfo'); }
注意:
process.env.TARO_ENV_NVUE
是一个示例,用于判断当前页面是否为nvue
。实际使用中,你可能需要根据uni-app
的实际环境变量进行调整。 -
使用替代方案: 如果
nvue
中确实无法使用uni.getWindowInfo
,你可能需要寻找其他方式获取窗口信息,或者调整你的应用逻辑以避免在nvue
页面中使用这个 API。 -
报告问题: 如果
uni.getWindowInfo
在nvue
中的不可用是一个意外的限制,你可以考虑向uni-app
的开发者社区或官方支持团队报告这个问题,以便他们可以在未来的版本中解决。
希望这些解决方案能帮助你解决在 nvue
中使用 uni.getWindowInfo
遇到的问题。