You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Node.js脚本中获取Windows/macOS/Linux系统的默认浏览器?

在Node.js中获取Windows、macOS、Linux默认浏览器的方法

Windows 系统

Windows的默认浏览器关联信息存储在注册表中,可通过执行系统命令读取:

const { exec } = require('child_process');

function getWindowsDefaultBrowser() {
  return new Promise((resolve, reject) => {
    // 查询HTTP协议对应的默认打开程序
    exec('reg query HKEY_CLASSES_ROOT\\http\\shell\\open\\command /ve', (err, stdout) => {
      if (err) return reject(err);
      // 从输出中提取浏览器路径
      const pathMatch = stdout.match(/"([^"]+)"/);
      if (pathMatch) {
        const browserPath = pathMatch[1];
        // 从路径中提取浏览器名称(如chrome.exe、msedge.exe)
        const browserName = browserPath.split('\\').pop().replace('.exe', '');
        resolve({ path: browserPath, name: browserName });
      } else {
        reject(new Error('无法解析默认浏览器信息'));
      }
    });
  });
}

macOS 系统

macOS可通过读取LaunchServices配置获取默认浏览器:

const { exec } = require('child_process');

function getMacOSDefaultBrowser() {
  return new Promise((resolve, reject) => {
    // 读取HTTP协议关联的应用Bundle ID
    exec('defaults read com.apple.LaunchServices/com.apple.launchservices.secure LSHandlers | grep -B1 -A2 http', (err, stdout) => {
      if (err) return reject(err);
      const bundleIdMatch = stdout.match(/LSHandlerRoleViewer = "([^"]+)"/);
      if (bundleIdMatch) {
        const bundleId = bundleIdMatch[1];
        // 根据Bundle ID获取应用名称
        exec(`osascript -e 'name of app id "${bundleId}"'`, (err, appName) => {
          if (err) return reject(err);
          resolve({ bundleId, name: appName.trim() });
        });
      } else {
        reject(new Error('无法获取默认浏览器Bundle ID'));
      }
    });
  });
}

Linux 系统

Linux发行版较多,通用方案是使用xdg-mime命令(多数桌面环境支持):

const { exec } = require('child_process');

function getLinuxDefaultBrowser() {
  return new Promise((resolve, reject) => {
    // 查询HTML文件默认打开程序的.desktop文件
    exec('xdg-mime query default text/html', (err, stdout) => {
      if (err) return reject(err);
      const desktopFile = stdout.trim();
      // 先尝试系统目录下的.desktop文件
      exec(`grep -E 'Name=' /usr/share/applications/${desktopFile} | head -n1`, (err, nameLine) => {
        if (err) {
          // 系统目录无匹配则尝试用户目录
          exec(`grep -E 'Name=' ~/.local/share/applications/${desktopFile} | head -n1`, (err, userNameLine) => {
            if (err) return reject(err);
            const name = userNameLine.split('=').pop().trim();
            resolve({ desktopFile, name });
          });
        } else {
          const name = nameLine.split('=').pop().trim();
          resolve({ desktopFile, name });
        }
      });
    });
  });
}

统一调用逻辑

根据当前系统自动匹配对应方法:

async function getDefaultBrowser() {
  switch (process.platform) {
    case 'win32':
      return await getWindowsDefaultBrowser();
    case 'darwin':
      return await getMacOSDefaultBrowser();
    case 'linux':
      return await getLinuxDefaultBrowser();
    default:
      throw new Error('不支持的操作系统');
  }
}

// 使用示例
getDefaultBrowser()
  .then(browser => console.log('默认浏览器:', browser))
  .catch(err => console.error('获取失败:', err));

注意:以上方法依赖系统原生命令,需确保运行环境具备基本命令执行权限。

内容的提问来源于stack exchange,提问作者Islam Y-

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 06:12:10