真机调试出现异常 uni-app

真机调试出现异常 uni-app

操作步骤:

  • 真机调试

预期结果:

  • 正常在手机上运行

实际结果:

  • 底部导航栏正常显示,但是内容区一片空白

bug描述:

  • H5页面预览的时候是正常的,但是真机调试的时候会出现 reportJSException >>> exception function:createInstanceContext, exception:white screen cause create instanceContext failed,check js stack -> Uncaught TypeError: Cannot read property 'performance' of undefined 异常
信息类别 信息内容
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本 win11
HBuilderX类型 正式
HBuilderX版本 4.87
手机系统 Android
手机系统版本 Android 16
手机厂商 小米
手机机型 小米15
页面类型 vue
vue版本 vue3
打包方式 云端
项目创建方式 HBuilderX

更多关于真机调试出现异常 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

根据您描述的问题,H5预览正常但真机调试出现白屏和Cannot read property ‘performance’ of undefined错误,这通常是由于App端JS运行环境与H5浏览器环境差异导致的。
在uni-app中,App端的JS运行在独立的JSCore中(非WebView),部分浏览器API可能不可用。performance是浏览器特有的API,在App环境中可能未定义。
解决方案:

检查代码中是否有直接访问window.performance的代码,添加兼容判断: if (typeof window !== ‘undefined’ && window.performance) {
// 使用performance的代码
} 通过HBuilderX控制台查看真机运行日志(无需点debug按钮),定位具体出错文件位置
在manifest.json中添加"transpiler": "babel"确保ES6+代码正确转译
避免使用仅适用于Web环境的第三方库

调试建议:

优先使用H5端调试:在HBuilderX右上角点击"预览",在内置浏览器调试DOM结构
参考真机运行常见问题排查指南检查USB调试设置
查看Chrome调试Android应用文档获取更详细的调试方法

注意:uni-app App端的JS运行在独立JSCore中,与WebView环境存在差异,部分浏览器API需要特殊处理。 内容为 AI 生成,仅供参考

更多关于真机调试出现异常 uni-app的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好 可以提供一个复现项目吗?

目前是排查到问题了,是一个公司的小伙伴使用document和window对象

这是一个典型的真机运行白屏问题,通常由 JavaScript 执行环境差异或代码兼容性问题导致。根据你提供的错误信息 Cannot read property 'performance' of undefined,核心原因是代码中访问了 performance 这个全局 API,但在某些真机环境(特别是 App 端)或特定条件下,该对象可能未被正确定义或初始化。

问题分析与解决步骤:

  1. 定位问题代码: 错误指向 createInstanceContext 时失败,这通常发生在页面或组件实例化阶段。你需要检查:

    • 页面/组件的 onLoadonShowcreated 等生命周期函数。
    • 全局的 main.jsApp.vue 中的初始化代码。
    • 任何在页面加载初期就执行的第三方库或工具函数。

    搜索整个项目代码(包括 node_modules 中你引入的库),查找 performance 关键字。常见于性能监控、日志打点或某些第三方库的初始化逻辑中。

  2. 常见解决方案:

    • 条件判断: 在访问 performance 之前,增加存在性判断。
      // 修改前
      const startTime = performance.now();
      
      // 修改后
      const startTime = window.performance && performance.now ? performance.now() : Date.now();
      // 或更严谨的,针对 App 端使用 uni.upx2px 等替代方案
回到顶部