我正在使用Node.js编写一个脚本文件,它在默认浏览器中打开一个特定的URL。我知道如何在用户的默认浏览器中打开URL,以前也曾在堆栈溢出时询问和回答过。但不讨论了解用户操作系统上的默认浏览器。我们(开发人员)知道我们在Node.js中运行脚本,有没有办法知道用户系统上使用的默认浏览器?用户可能使用Mac OS、Windows或任何Linux发行版。
x8diyxa71#
您可以使用Node.js确定用户系统上的默认浏览器。在Windows上:
const { execSync } = require('child_process'); function getDefaultBrowser() { try { const regResult = execSync('REG QUERY HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\Shell\\Associations\\UrlAssociations\\http\\UserChoice /v ProgId', {encoding: 'utf8'}); const [, progId] = regResult.trim().split(/\s+/); const exeResult = execSync(`REG QUERY HKEY_CLASSES_ROOT\\${progId}\\shell\\open\\command /ve`, {encoding: 'utf8'}); const exeCmd = exeResult.trim().split(/\s+/)[0]; return exeCmd; } catch (err) { console.error('Error occurred while fetching default browser', err); } } console.log(getDefaultBrowser());
在macOS上:
const { execSync } = require('child_process'); function getDefaultBrowser() { try { const defaultsResult = execSync('defaults read /Users/$(whoami)/Library/Preferences/com.apple.LaunchServices/com.apple.launchservices.secure.plist | grep https | head -n1 | cut -d \'"\' -f4', {encoding: 'utf8'}); const bundleId = defaultsResult.trim().split('.').slice(0, -1).join('.'); const lsResult = execSync(`mdfind "kMDItemContentTypeTree=com.apple.application-bundle&&kMDItemCFBundleIdentifier=='${bundleId}'"`, {encoding: 'utf8'}); const appPath = lsResult.trim().split('\n')[0]; const exeCmd = `"${appPath}/Contents/MacOS/${bundleId.split('.').pop()}"`; return exeCmd; } catch (err) { console.error('Error occurred while fetching default browser', err); } } console.log(getDefaultBrowser());
在Linux上:
const { execSync } = require('child_process'); function getDefaultBrowser() { try { const xdgResult = execSync('xdg-settings get default-web-browser', {encoding: 'utf8'}); const exeCmd = execSync(`which ${xdgResult.trim()}`, {encoding: 'utf8'}).trim(); return exeCmd; } catch (err) { console.error('Error occurred while fetching default browser', err); } } console.log(getDefaultBrowser());
这些代码片段将获取相应平台上默认浏览器的可执行命令,然后您可以使用此信息在默认浏览器中使用Node.js打开URL。
sqserrrh2#
默认浏览器在操作系统级别设置,并注册以执行某些任务,如打开.html页面或通用 URL,这意味着您可以找到一种方法来询问系统 * 哪个 * 是这样的默认浏览器,或者您需要一个 *2步验证 * 过程:1.在任何开放端口(使用0作为端口)创建服务器,检索该端口并将浏览器指向该0.0.0.0:port,以通过用户代理检测默认情况下哪个浏览器打开页面。1.您将这些详细信息存储在某个地方,以确保您要显示的真实的 URL 知道哪个浏览器将在那里登陆。
.html
0
0.0.0.0:port
“相当好”的部分是因为默认浏览器带有随机化的用户代理,以减轻进一步的指纹识别,但我认为这些情况应该通过真实的网站上的功能检测来解决,或者如果您不关心这类浏览器,这些情况就会失败。或者,您的初始登录页与重定向可以做一些功能检测,以微调和缩小的可能性,浏览器是你所期望的,或有能力,你要在最终网站服务。为了历史的缘故...这里有两个文件,一个检测 Bootstrap 和你的真实的网站...detect.js
detect.js
const server = require('http').createServer((_, res) => { res.write(` <!doctype html> <script> const browser = globalThis.chrome ? 'chrome' : (globalThis.netscape ? 'firefox' : (globalThis.webkit ? 'safari' : 'unknown')); document.write( '<meta http-equiv="refresh" content="0;url=http://localhost:8080/?browser=' + browser + '">' ); </script> `.replace(/^\s+/gm, '').trim()); res.end(); // get out on first launch as bootstrap server.close(); }) .listen(0, () => { // to simplify this demo / for demo sake // redirect OS default browser here: const {port} = server.address(); console.log(`http://0.0.0.0:${port}/`); });
server.js示例:
server.js
const {parse} = require('url'); const server = require('http').createServer((req, res) => { const {query: {browser}} = parse(req.url, true); res.write(` <!doctype html> <h1>Hello ${browser}!</h1> `.replace(/^\s+/gm, '').trim()); res.end(); }) .listen(8080); // for demo sake (stops in 5 seconds) setTimeout(() => { server.close() }, 5000);
现在,如果你把这些文件保存在本地,你可以通过node server.js & node detect.js运行这两个文件,这样检测就会检测并关闭,* 服务器 * 就会继续运行......用你喜欢的任何东西来改变server.js,或者把detect.js重定向到你喜欢的任何地方。
node server.js & node detect.js
5cg8jx4n3#
看看这个https://www.npmjs.com/package/x-default-browser来自自述文件
How it works Windows: checks registry value HKCU\Software\Clients\StartMenuInternet Linuxes: reads the output of xdg-mime query default x-scheme-handler/http OS X: delegated to default-browser-id from Sindre Sorhus
3条答案
按热度按时间x8diyxa71#
您可以使用Node.js确定用户系统上的默认浏览器。
在Windows上:
在macOS上:
在Linux上:
这些代码片段将获取相应平台上默认浏览器的可执行命令,然后您可以使用此信息在默认浏览器中使用Node.js打开URL。
sqserrrh2#
默认浏览器在操作系统级别设置,并注册以执行某些任务,如打开
.html
页面或通用 URL,这意味着您可以找到一种方法来询问系统 * 哪个 * 是这样的默认浏览器,或者您需要一个 *2步验证 * 过程:1.在任何开放端口(使用
0
作为端口)创建服务器,检索该端口并将浏览器指向该0.0.0.0:port
,以通过用户代理检测默认情况下哪个浏览器打开页面。1.您将这些详细信息存储在某个地方,以确保您要显示的真实的 URL 知道哪个浏览器将在那里登陆。
“相当好”的部分是因为默认浏览器带有随机化的用户代理,以减轻进一步的指纹识别,但我认为这些情况应该通过真实的网站上的功能检测来解决,或者如果您不关心这类浏览器,这些情况就会失败。
或者,您的初始登录页与重定向可以做一些功能检测,以微调和缩小的可能性,浏览器是你所期望的,或有能力,你要在最终网站服务。
为了历史的缘故...这里有两个文件,一个检测 Bootstrap 和你的真实的网站...
detect.js
server.js
示例:现在,如果你把这些文件保存在本地,你可以通过
node server.js & node detect.js
运行这两个文件,这样检测就会检测并关闭,* 服务器 * 就会继续运行......用你喜欢的任何东西来改变server.js
,或者把detect.js
重定向到你喜欢的任何地方。5cg8jx4n3#
看看这个https://www.npmjs.com/package/x-default-browser
来自自述文件