我几天来偶然发现了这个问题,并找到了以下链接:-
然后我想出了我自己的版本。 这假设浏览器/应用程序安装在/application目录中。
var {
spawn
} = require('child_process');
const fs = require("fs"); // Or `import fs from "fs";` with ESM
function detectAllBrowsers(callback) {
const browsers = [
'Chromium',
'Firefox',
'Google Chrome',
'Opera',
'Safari',
'TextEdit'
]
var detectedBrowsers = [];
var promises = [];
browsers.forEach(function(browserName, index) {
// /Applications/Google\ Chrome.app/Contents/Info.plist
var path = '/Applications/' + browserName + '.app';
var aPromise = new Promise(function(resolve, reject) {
if (fs.existsSync(path)) {
var aBrowser = {
name: browserName,
path: path
}
var sp = spawn('/usr/libexec/PlistBuddy', ['-c', 'print :CFBundleShortVersionString', path + '/Contents/Info.plist']);
sp.stdout.setEncoding('utf8')
sp.stdout.on('data', data => {
aBrowser.version = data.trim();
});
sp.on('close', code => {
detectedBrowsers.push(aBrowser);
resolve('done');
});
} else {
resolve('done');
}
});
promises.push(aPromise);
});
Promise.all(promises).then(data => {
callback(detectedBrowsers);
});
}
detectAllBrowsers(function(detectedBrowsers) {
console.log(detectedBrowsers);
});