uni-app nvue 的 vue3 版本 uni.getWindowInfo 报错

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

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 云端

getwindowstest.zip


12 回复

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>

<script> export default { onLoad() { uni.onWindowResize((res) => { this.systeminfo() }) }, methods: { systeminfo() { const res = uni.getSystemInfoSync() console.log(111, res); } } } </script>

你用的是 nvue 页面吗,vue页面正常

回复 工程狮: 是,你给我一个工程吧,补充报错截图或者报错日志,确保我们测试的是同一个问题

回复 工程狮: 请提供空白复现工程,并说明操作步骤

针对你提到的 uni-appnvuevue3 版本使用 uni.getWindowInfo 报错的问题,首先我们需要明确一点:nvuevue 页面在 uni-app 中是两种不同的渲染引擎,nvue 使用的是 Weex 引擎,而 vue 页面使用的是 Vue.js 引擎。由于这种差异,一些 API 在两者之间的可用性可能会有所不同。

uni.getWindowInfo 是一个用于获取窗口信息的 API,它通常在 vue 页面中可以正常工作,但在 nvue 中可能不支持。如果你在 nvue 页面中使用 uni.getWindowInfo 并遇到了报错,那么很可能是因为这个 API 在 nvue 中不可用。

为了解决这个问题,你可以考虑以下几种方案:

  1. 检查文档和版本兼容性: 确保你使用的 uni-app 版本支持你正在使用的 API。查阅最新的 uni-app 官方文档,确认 uni.getWindowInfo 是否支持 nvue

  2. 条件性使用 API: 在你的代码中,可以根据当前页面的类型(vuenvue)来决定是否调用 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 的实际环境变量进行调整。

  3. 使用替代方案: 如果 nvue 中确实无法使用 uni.getWindowInfo,你可能需要寻找其他方式获取窗口信息,或者调整你的应用逻辑以避免在 nvue 页面中使用这个 API。

  4. 报告问题: 如果 uni.getWindowInfonvue 中的不可用是一个意外的限制,你可以考虑向 uni-app 的开发者社区或官方支持团队报告这个问题,以便他们可以在未来的版本中解决。

希望这些解决方案能帮助你解决在 nvue 中使用 uni.getWindowInfo 遇到的问题。

回到顶部