如何在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-
相关产品推荐
相关产品推荐

