如何通过浏览器链接或唤起提示打开Electron开发的Node.js桌面应用
Electron 桌面应用浏览器链接唤起实现方案
你要实现的是自定义URI协议唤起能力,不需要额外第三方npm包,Electron本身已经提供了原生支持,按以下步骤配置即可:
1. 主进程核心逻辑配置
在你的Electron主进程入口文件(通常为main.js/main.ts)中添加如下代码:
- 协议注册逻辑,需要放在
app.whenReady()触发之前执行
const { app, path } = require('electron') // 自定义协议名,后续浏览器唤起链接格式为 {协议名}://{参数} const CUSTOM_PROTOCOL = 'mymeetapp' // 适配开发/生产环境的协议注册 if (process.env.NODE_ENV === 'development') { // 开发环境需额外指定electron执行路径和项目入口路径,根据你的项目结构调整入口路径 app.setAsDefaultProtocolClient(CUSTOM_PROTOCOL, process.execPath, [path.resolve(process.argv[1])]) } else { // 生产环境直接注册即可 app.setAsDefaultProtocolClient(CUSTOM_PROTOCOL) }
- 监听唤起事件,获取链接携带的参数
let mainWindow; // 替换为你自己的主窗口实例变量 // macOS 系统唤起事件监听 app.on('open-url', (event, url) => { event.preventDefault() // url 为完整的唤起链接,示例:mymeetapp://join?roomId=123456 // 此处添加你的业务逻辑,比如跳转会议页面、填充参数等 if (mainWindow) { mainWindow.focus() } }) // Windows 系统唤起事件监听 app.on('second-instance', (event, commandLine) => { // Windows 系统唤起链接会放在commandLine数组的末尾 const invokeUrl = commandLine.pop() // 此处添加你的业务逻辑 if (mainWindow) { if (mainWindow.isMinimized()) mainWindow.restore() mainWindow.focus() } })
2. 开发环境测试
你当前用yarn run dev启动应用,启动完成后直接打开浏览器,在地址栏输入你定义的协议链接(比如mymeetapp://join?roomId=123456)回车,即可弹出唤起提示,选择你的应用完成跳转。
如果没有弹出唤起提示,可以手动检查系统协议关联:
- Windows:打开「设置→应用→默认应用→按协议指定默认应用」,找到你定义的CUSTOM_PROTOCOL,确认关联到当前运行的Electron程序
- macOS:打开「脚本编辑器」,运行代码
open location "mymeetapp://test"即可测试唤起
3. 生产打包配置
如果使用electron-builder打包,需要在package.json的build配置中添加协议声明,打包安装后会自动注册系统协议:
{ "build": { "protocols": [ { "name": "mymeetapp", "schemes": ["mymeetapp"] } ] } }
如果使用electron-packager打包,添加打包参数--protocol=mymeetapp --protocol-name=mymeetapp即可。
4. 网页端调用方式
在你的网页中直接添加对应协议的超链接即可:
<a href="mymeetapp://join?roomId=123456">点击加入会议</a>
用户点击链接后就会弹出唤起桌面应用的提示。
内容的提问来源于stack exchange,提问作者user11531820
相关产品推荐
相关产品推荐

