uni-app global对象的变化

uni-app global对象的变化

开发环境 版本号 项目创建方式
Windows 19041.630 HBuilderX
操作步骤:
- 使用hbuilder创建项目

预期结果:
console.log('global:',global);  
global: :  Window {window: Window, self: Window, document: HTMLDocument, location: Location, top: Window, …}
实际结果:
console.log('global:',global);
global: {isFinite: ƒ, Array: ƒ, Date: ƒ, Error: ƒ, Function: ƒ, …}
bug描述:
使用hbuilder创建项目
console.log('global:',global);
之前的项目输出是
global: :  Window {window: Window, self: Window, document: HTMLDocument, location: Location, top: Window, …}  
现在新建项目的输出是
global: {isFinite: ƒ, Array: ƒ, Date: ƒ, Error: ƒ, Function: ƒ, …}  
是什么原因啊?我看之前的uni不是挂载的global的吗?现在挂在global的对象不能全局使用了。。。

更多关于uni-app global对象的变化的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app global对象的变化的实战教程也可以访问 https://www.itying.com/category-93-b0.html


这是uni-app框架升级后的正常变化。从HBuilderX 3.1.0版本开始,uni-app对global对象进行了重构,移除了浏览器环境的Window对象属性,改为标准的JavaScript全局对象。

变化原因:

  1. 标准化:新的global对象更符合ECMAScript标准,避免了在非浏览器环境(如小程序、App)中引用浏览器专有API导致的兼容性问题
  2. 跨端一致性:统一了各端的global对象实现,确保代码在不同平台表现一致
  3. 安全性:移除了可能引起安全风险的浏览器环境特定属性

影响范围:

  • windowdocumentlocation等浏览器特有属性不再挂载到global
  • 标准JavaScript全局对象(Array、Date、Function等)保持不变
  • 原有的全局变量访问方式需要调整

解决方案: 如需访问浏览器环境API,请使用条件编译:

// #ifdef H5
console.log(window);
console.log(document);
// #endif

// 跨端推荐使用uni API替代
uni.getSystemInfo({...})
uni.navigateTo({...})
回到顶部