提问者:小点点

如何使用node.js检测Mac机器上安装的浏览器?


我需要一个可以检测本地机器上安装的浏览器(或应用程序)的node-js程序


共1个答案

匿名用户

我几天来偶然发现了这个问题,并找到了以下链接:-

  1. 使用Electro/node.js,如何检测macOS上所有已安装的浏览器? [花费时间;只给了我浏览器的名称,如果我需要path&version(路径和版本),则标题在某种程度上无法处理]
  2. https://github.com/litixsoft/karma-detect-browsers[似乎合法,不能使用]

然后我想出了我自己的版本。 这假设浏览器/应用程序安装在/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);
});