真机调试出现异常 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
根据您描述的问题,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 端)或特定条件下,该对象可能未被正确定义或初始化。
问题分析与解决步骤:
-
定位问题代码: 错误指向
createInstanceContext时失败,这通常发生在页面或组件实例化阶段。你需要检查:- 页面/组件的
onLoad、onShow、created等生命周期函数。 - 全局的
main.js、App.vue中的初始化代码。 - 任何在页面加载初期就执行的第三方库或工具函数。
搜索整个项目代码(包括
node_modules中你引入的库),查找performance关键字。常见于性能监控、日志打点或某些第三方库的初始化逻辑中。 - 页面/组件的
-
常见解决方案:
- 条件判断: 在访问
performance之前,增加存在性判断。// 修改前 const startTime = performance.now(); // 修改后 const startTime = window.performance && performance.now ? performance.now() : Date.now(); // 或更严谨的,针对 App 端使用 uni.upx2px 等替代方案
- 条件判断: 在访问

