网页调启Electron客户端及传参方法

前言

有些时候网页中某些功能受到浏览器的限制,需要调用桌面客户端完成,例如在网页端使用迅雷链接下载文件,可以直接启动本地的迅雷客户端进行下载。那么使用Electron构建的桌面客户端如何实现被网页调启和传参呢?

正文

Windows系统中是通过注册伪协议来实现的,在注册表中添加URL Protocol来实现伪协议。在Electron实现伪协议主要有两种方式:

1.通过setAsDefaultProtocolClient注册协议

根据Electron文档中的介绍,可使用app.setAsDefaultProtocolClient()方法在主进程中实现。

可设置app.requestSingleInstanceLock()方法实现锁定只运行一个应用程序,并可以在'second-instance'事件中获取到传递的参数。

import { app } from 'electron'

if (!app.isDefaultProtocolClient('ecpan')) {
  app.setAsDefaultProtocolClient('ecpan')
}

const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {
  app.quit()
} else {
  app.on('second-instance', (event, argv) => {
    if (process.platform === 'win32') {
      deeplinkingUrl = argv.slice(1) // 接收传递参数
      console.log(deeplinkingUrl);
    }
  })
}

但是,该方法的缺点是必须首次安装软件并打开后才能执行相应方法,注册表中才会写入URL Scheme,并且是写入注册表的,卸载时不会被主动清理,卸载软件后再打开伪协议还是会有打开软件的提示。

2.通过electron-builder打包配置文件写入协议

对于基于vue-cli4配合vue-cli-plugin-electron-builder创建的项目,使用electron-builder进行打包,build的配置项要写在vue.config.js文件中(直接用electron-vue脚手架创建的项目直接写在package.json)。

module.exports = {
    pluginOptions: {
        electronBuilder: {
            nodeIntegration: true,
            builderOptions: {
                win: {
                    target: {
                        target: 'nsis'
                    }
                },
                nsis: { include: "installer.nsh" }
            }
        }
    }
}

在builderOptions的nsis中添加include: "installer.nsh",并在根目录创建installer.nsh文件添加以下代码:

!macro customInstall
  DeleteRegKey HKCR "skydrive"
  WriteRegStr HKCR "skydrive" "" "URL:skydrive"
  WriteRegStr HKCR "skydrive" "URL Protocol" ""
  WriteRegStr HKCR "skydrive\shell" "" ""
  WriteRegStr HKCR "skydrive\shell\Open" "" ""
  WriteRegStr HKCR "skydrive\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1"
!macroend

!macro customUnInstall
  DeleteRegKey HKCR "skydrive"
!macroend

打包程序并安装后直接在浏览器地址栏输入skydrive://,便可打开应用程序,卸载后也没有错误提示。再结合第一种方案中获取参数的方法,可以获得更好的实现网页调用客户端的功能。

结语

两种方案各有利弊,直接通过electron API注册协议简单便捷,但第一次运行程序后才生效并且卸载不能主动清理注册表;修改打包配置文件的方式能更完整地实现功能,但需要对NSIS有一定了解。


来源:

移动云开发者社区 (10086.cn)icon-default.png?t=L9C2https://ecloud.10086.cn/api/query/developer/user/home.html?ticket=ST-33219-9gQBacA5Cf06BVZt9epk-cas01.example.org#L2FwaS9xdWVyeS9kZXZlbG9wZXIvYmxvZy9ibG9nZGV0YWlsLmh0bWw/YmxvZ19pZD1lMmUyNDY0MWI3MTk0NDAxODNkMzM1MzNkOTZlYmM2Nw==

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Electron 中实现客户端的增量更新可以通过以下步骤进行: 1. 生成差异包:在每次应用程序更新时,将新版本与旧版本进行比较,生成差异包。差异包只包含了新版本与旧版本之间的变化部分,而不是整个应用程序的完整包。 2. 服务器端配置:搭建一个服务器来存储应用程序的更新文件和元数据。服务器需要提供一个接口,供客户端查询是否有可用的更新。 3. 客户端检查更新:在应用程序启动时,客户端向服务器发送请求,查询是否有可用的更新。服务器会返回最新版本的元数据,包括差异包的下载链接、版本号等信息。 4. 下载差异包:如果有可用的增量更新,客户端会从服务器上下载对应的差异包文件,而不是整个应用程序包。 5. 合并差异包:客户端使用差异包和旧版本的应用程序文件进行合并操作,生成新版本的应用程序文件。 6. 更新应用程序:将合并后的新版本应用程序文件替换掉旧版本的文件。可以使用 Electron 提供的文件系统 API 或其他工具来实现文件替换操作。 7. 重启或生效:重新启动应用程序以使更新生效。可以通过 Electron 的自动重启机制或向用户显示提示信息来通知更新已完成。 需要注意的是,增量更新可能需要更多的服务器端和客户端的逻辑处理,而且在某些情况下可能会有一些复杂性。此外,确保增量更新过程的安全性和稳定性也很重要,例如对下载的文件进行校验、错误处理和回滚机制等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值