当前位置: 首页 > news >正文

通过特定协议拉起 electron 应用

在 Android 通过 sheme 协议可以拉起其他应用。
electron 应用也可以通过类似特定协议被拉起。
在同时有 web、客户端的应用里,可以通过这种方式在 web 拉起客户端。

支持拉起客户端

  const PROTOCOL = 'xxx'if (process.defaultApp) {// 这里是开发环境,有启动参数if (process.argv.length >= 2) {app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, [path.resolve(process.argv[1])]);}} else {app.setAsDefaultProtocolClient(PROTOCOL);}

这里注册启动协议得程序运行一次才生效,体验不好。有没有在安装时就生效的实现?同时在卸载时就取消注册?

mac

在electron-builder.yml加配置,xxx是协议名

# 注册客户端启动协议,适用于mac
protocols:- name: ' xxx'schemes: - 'xxx'

windows

在electron-builder.yml的 build 目录增加installer.nsh文件,比如electron-builder.yml是

directories:buildResources: build

就增加build/installer.nsh

!define PROTOCOL_NAME "xxx"
!macro customInstallDeleteRegKey HKCU "${PROTOCOL_NAME}"WriteRegStr HKCU "${PROTOCOL_NAME}" "" "URL:${PROTOCOL_NAME}"WriteRegStr HKCU "${PROTOCOL_NAME}" "URL Protocol" ""WriteRegStr HKCU "${PROTOCOL_NAME}\shell" "" ""WriteRegStr HKCU "${PROTOCOL_NAME}\shell\Open" "" ""WriteRegStr HKCU "${PROTOCOL_NAME}\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend!macro customUnInstallDeleteRegKey HKCU "${PROTOCOL_NAME}"
!macroend

除此之外

还要记得本地开发时仍需要注册,不然调试不生效,但程序退出后记得取消注册

app.removeAsDefaultProtocolClient(PROTOCOL, process.execPath, [path.resolve(process.argv[1])]);

处理二次启动时的参数

拉起后希望能处理传参,比如在浏览器通过 xxx://open?a=1拉起,希望能获取到 open,a=1这些参数。由于 mac默认单例和electron实现的原因,在 mac 和 windows 下有些不一样。

mac

  // 处理请求参数app.on('open-url', (_, url) => {dialog.showErrorBox('Welcome Back from open-url', `You arrived from: ${url}`);handleUrl(url);});

windows

  app.on('second-instance', (_, commandLine) => {const url = commandLine[commandLine.length - 1]dialog.showErrorBox('Welcome Back 111', `You arrived from: ${url}`);if(url) handleUrl(url);});

处理首次启动时的参数

  if (process.argv.length > 1) {const url = process.argv.find(arg => arg.startsWith(`${PROTOCOL}://`));if (url) handleUrl(url, {fromInit: true});}

参考链接

https://www.electronjs.org/docs/latest/tutorial/launch-app-from-url-in-another-app
https://xuxin123.com/electron/url-scheme/

http://www.xdnf.cn/news/14455.html

相关文章:

  • electron 渲染进程按钮创建新window,报BrowserWindow is not a constructor错误;
  • 嵌入式设备网络的动态ID分配机制实现
  • 极狐GitLab 用户 API 速率限制如何设置?
  • CenterTrack
  • DNS解析失败怎么解决?
  • 【Spring Boot 源码学习】深入 ConfigurableEnvironment 的初始化过程
  • 论文阅读笔记——Mixtral of Experts
  • 中级社会工作者考试精选练习题
  • 深度学习-全连接神经网络-1
  • C++代码优化
  • 梯度下降代码
  • fatdds:传输层SHM和DATA-SHARING的区别
  • 数据结构|基数排序及八个排序总结
  • Python爬虫入门
  • 使用veaury,在vue项目中运行react组件
  • 汉诺塔专题:P1760 通天之汉诺塔 题解 + Problem D: 汉诺塔 题解
  • AI写程序: 多线程网络扫描网段ip工具
  • STM32使用rand()生成随机数并显示波形
  • 【最后203篇系列】028 FastAPI的后台任务处理
  • JVM之经典垃圾回收器
  • C++数据结构与二叉树详解
  • Kubernetes》》k8s》》Namespace
  • ProfibusDP转ModbusRTU网关,流量计接入新方案!
  • React 中如何获取 DOM:用 useRef 操作非受控组件
  • 珈和科技:无人机技术赋能智慧农业,精准施肥与病虫害监控全面升级
  • Perf学习
  • 使用最新threejs复刻经典贪吃蛇游戏的3D版,附完整源码
  • Spring Boot配置文件优先级全解析:如何优雅覆盖默认配置?
  • 盲超分-双循环对比学习退化网络(蒸馏)
  • Cursor 生成java测试用例