uni-app edge 下uni.getSystemInfoSync().windowWidth获取值错误

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

uni-app edge 下uni.getSystemInfoSync().windowWidth获取值错误

bug描述:

uni.getSystemInfoSync().windowWidth 获取的值错误,导致pc浏览器显示出手机端界面

alt text

信息类别 详细信息
产品分类 uniapp/H5
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win11
HBuilderX类型 正式
HBuilderX版本号 4.29
浏览器平台 Edge
浏览器版本 131.0.2903.63 (正式版本) (64 位)
项目创建方式 HBuilderX

2 回复

提供下 vue 版本和 HBuilderX/node_moduels 版本。我测试,vue3 和 HBuilderX alpha 最新版,在 edge 浏览器里运行
onLoad(){
console.log(111,uni.getSystemInfoSync().windowWidth );
} 打印值正常,你页面中打印的 956 不对吗,应该是多少?


在处理 uni-app 在 Microsoft Edge 浏览器下使用 uni.getSystemInfoSync().windowWidth 获取值错误的问题时,通常这可能与特定浏览器的实现差异或兼容性问题有关。uni-app 是一个使用 Vue.js 开发所有前端应用的框架,它通过编译为多个平台(包括小程序、H5、App等)的代码来运行。在 H5 平台上,它依赖于浏览器的原生 API 和行为。

首先,确认一下 uni.getSystemInfoSync() 方法在 H5 平台上实际上是依赖于浏览器的 window 对象来获取系统信息的。对于 windowWidth,它通常应该返回视口的宽度,但在某些浏览器或特定情况下,这个值可能与预期不符。

以下是一个简单的代码示例,展示如何在 uni-app 的 H5 项目中手动获取视口宽度,并与 uni.getSystemInfoSync().windowWidth 的结果进行比较。这可以帮助你诊断问题:

// 在页面的 onLoad 或 mounted 生命周期钩子中执行
export default {
  onLoad() {
    // 使用 uni-app 提供的 API 获取窗口宽度
    const uniWidth = uni.getSystemInfoSync().windowWidth;
    console.log('uni-app 获取的窗口宽度:', uniWidth);

    // 手动获取视口宽度
    const viewportWidth = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
    console.log('手动获取的视口宽度:', viewportWidth);

    // 比较两个值
    if (uniWidth !== viewportWidth) {
      console.warn('uni-app 获取的窗口宽度与手动获取的值不一致');
    }
  }
}

如果 uni.getSystemInfoSync().windowWidth 返回的值确实与预期不符,你可以考虑以下几种解决方案:

  1. 使用手动获取视口宽度的方法:如上所示,直接使用 window.innerWidth 或相关的 DOM 属性来获取宽度。

  2. 条件判断:针对 Edge 浏览器做特殊处理,如果检测到是 Edge 浏览器,则使用手动获取宽度的方法。

  3. 报告问题:如果这是一个框架级别的 bug,考虑在 uni-app 的官方社区或 GitHub 仓库中报告此问题,以便开发者团队可以调查并修复。

  4. 等待更新:有时候,这类问题可能已经在最新的框架版本中得到了解决,检查是否有可用的更新。

通过这些方法,你应该能够找到一个合适的解决方案来处理在 Edge 浏览器下 uni.getSystemInfoSync().windowWidth 获取值错误的问题。

回到顶部