Electron 如何判断运行平台是鸿蒙系统(OpenHarmony)

随着鸿蒙系统(OpenHarmony)生态的不断发展,越来越多的 Electron 应用开始考虑对其进行适配。而适配的第一步,便是准确判断应用当前运行的平台是否为鸿蒙系统。本文将从核心原理出发,详细介绍两种实用的判断方法,并分享适配过程中的注意事项。

一、核心原理:从系统信息中提取特征

Electron 框架基于 Chromium 和 Node.js,这为我们判断操作系统提供了两个关键途径:

  • Node.js 层面:通过 Node.js 内置的 os 模块,可以直接获取操作系统的类型、版本等底层信息,鸿蒙系统会在这些信息中留下特定标识。
  • Chromium 层面:在 Electron 的渲染进程中,可借助浏览器环境的 navigator.userAgent(用户代理)获取系统相关信息,鸿蒙系统的 UA 字符串会包含特征关键字。

通过这两个层面的信息交叉验证,即可实现对鸿蒙系统的准确判断。

二、具体实现:两种判断方法详解

方法 1:主进程中使用 Node.js 的 os 模块

在 Electron 的主进程中,推荐使用 Node.js 内置的 os 模块获取系统信息。鸿蒙系统在 os.type()os.release() 方法的返回值中会体现明显特征:

  • os.type():鸿蒙系统会直接返回 'OpenHarmony'
  • os.release():返回的版本信息中会包含 'ohos''OpenHarmony' 关键字。

基于这些特征,我们可以封装一个通用的判断函数:

const os = require('os');
const { app } = require('electron');

/**
 * 判断当前系统是否为鸿蒙(OpenHarmony)
 * @returns {boolean} 是鸿蒙返回true,否则false
 */
function isHarmonyOS() {
  try {
    // 优先通过 os.type() 判断,最直接准确
    const systemType = os.type();
    if (systemType === 'OpenHarmony') {
      return true;
    }

    // 兼容部分场景:通过 os.release() 版本特征判断
    const systemRelease = os.release().toLowerCase();
    return systemRelease.includes('ohos') || systemRelease.includes('openharmony');
  } catch (error) {
    console.error('判断鸿蒙系统失败:', error);
    return false;
  }
}

// 应用就绪后执行判断
app.whenReady().then(() => {
  console.log('当前运行平台是否为鸿蒙系统:', isHarmonyOS());
});

方法 2:渲染进程中使用 navigator.userAgent

在 Electron 的渲染进程(如前端页面、Vue/React 组件等)中,无法直接访问 Node.js 的 os 模块,此时可以通过浏览器环境的 navigator.userAgent 进行判断。鸿蒙系统的 UA 字符串格式通常为:Mozilla/5.0 (Linux; U; OpenHarmony 4.0; zh-CN; xxx) AppleWebKit/xxx,其中包含明确的 'OpenHarmony' 关键字。

渲染进程中的判断函数实现如下:

/**
 * 从 User Agent 中判断是否为鸿蒙系统
 * @returns {boolean}
 */
function isHarmonyOSByUA() {
  if (!window.navigator) {
    return false;
  }
  const userAgent = window.navigator.userAgent;
  // 匹配 UA 中的 OpenHarmony 关键字
  return userAgent.includes('OpenHarmony');
}

// 使用示例
document.addEventListener('DOMContentLoaded', () => {
  const result = isHarmonyOSByUA() 
    ? '当前是鸿蒙系统' 
    : '当前不是鸿蒙系统';
  document.getElementById('os-result').textContent = result;
});

三、适配注意事项:提高判断准确率与稳定性

在实际项目中,为了确保判断逻辑的可靠性,还需要注意以下几点:

  1. 多方法组合判断:单一方法可能存在边缘场景的兼容问题,建议在主进程中结合 os.type()os.release() 判断,在渲染进程中补充 userAgent 验证,通过多维度交叉提高准确率。
  2. 处理异常情况:封装判断函数时,需添加 try-catch 逻辑,避免因系统信息获取失败导致应用崩溃(如某些特殊环境下 os 模块方法返回异常值)。
  3. 关注版本适配:鸿蒙系统处于快速迭代中,不同版本的 os.release() 或 UA 格式可能略有差异,使用 includes 进行模糊匹配比精确匹配更稳妥。
  4. 结合官方适配文档:参考 OpenHarmony SIG Electron 仓库的最新动态,及时同步鸿蒙对 Electron 的适配进展,调整判断逻辑。

四、总结

Electron 判断鸿蒙系统的核心是抓住系统信息中的特征标识,通过 Node.js 的 os 模块或 Chromium 的 userAgent 即可实现。在实际开发中,建议结合两种方法并做好异常处理,同时关注鸿蒙生态的最新适配动态,为应用的跨平台能力打下坚实基础。

如果需要进一步实现 Electron 应用在鸿蒙系统上的完整适配(如权限申请、API 兼容等),可以留言交流,后续将推出相关实践教程!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐