electron如何注册伪协议?伪协议的检测及删除
发布于 作者:苏南大叔 来源:程序如此灵动~本文中,苏南大叔将要说明,如何在electron
中实现伪协议。通过本文的学习,您就可以在网页里面,拉起你本地的electron
程序了。当然,还可以根据伪协议传递的不同参数,而做出不同的具体electron
行为,本文中的功能代码可以说是非常实用了,建议大家多多练习。
本文测试环境:win10
,electron@5.0.1
。本文内容,支持mac
和windows
,在苏南大叔的测试中,暂时不支持centos
。支持mac
和windows
的函数中,部分参数仅仅支持windows
。
设置伪协议
开启伪协议的代码非常简单,以注册一个伪协议sunan
为例,就如下几行就可以了。
主进程main.js
:
const {app} = require('electron')
app.setAsDefaultProtocolClient("sunan");
函数的原型是:
app.setAsDefaultProtocolClient(protocol[, path, args])
所以,大家可以看到:
- 第二个参数
path
是可选的,默认值是:process.execPath
。 - 第三个参数是
args
也是可选的。并且当且仅当win
系统的时候args
才生效,默认值是[]
,具体的使用方式,可以参见:https://newsn.net/say/electron-fake-protocol-debug.html
所以,上面的函数等同于如下变形:
app.setAsDefaultProtocolClient("sunan",process.execPath);
app.setAsDefaultProtocolClient("sunan",process.execPath,[]);
如果您的目的就是调用起您的electron
,而不需要进一步区分处理的话,这里的代码就足够了。另外,如果第一次成功设置了伪协议,第二次再次设置伪协议的时候,并不会重复操作。这一点上是比较智能的。
大多数情况(高版本+生产环境)下来说,args
设置为[]
即可。但是对于低版本或者非生产环境
来说,这个args
是有很多学问的,设置为[]
会出一些问题。目前,这个事情暂时不在本文讨论范围内。
删除伪协议
此方法检查当前程序是否为协议(也称为URI scheme)的默认处理程序。 如果是,它会删除应用程序作为默认处理程序。
app.removeAsDefaultProtocolClient(protocol[, path, args])
根据官方说明,此removeAsDefaultProtocolClient
函数仅支持mac
系统和win
系统。
检测伪协议
此方法检查当前可执行文件是否是协议(也称为URI方案) 的默认处理程序。如果是, 它将返回true。否则, 它将返回false。
app.isDefaultProtocolClient(protocol[, path, args])
范例代码
下面的代码是上述几个函数的联合测试代码,操作的伪协议叫做sunan
。
const {app} = require('electron')
app.setAsDefaultProtocolClient("sunan");
const status_1=app.isDefaultProtocolClient("sunan");
console.log("protocol check:",status_1);
app.removeAsDefaultProtocolClient("sunan");
const status_2=app.isDefaultProtocolClient("sunan");
console.log(" protocol check2:",status_2);
注意事项
在win
系统中,伪协议的实现,是通过写注册表的方式来实现的。注册表的写入操作,共有两次写入。可能会被360
之类的软件拦截掉,所以,请注意允许相关的注册表操作才可以。
详细的原理描述,可以参见下面的链接:
如果您需要根据不同的参数,进一步区分electron
的后续行为的话,您还需要对传递过来的参数做进一步的处理。
结束语
本文的测试环境是win10
,在其他的操作系统中,实际上还是有特殊情况的。所以,本文就做个开山篇,对于其他操作系统的特殊情况,苏南大叔会做后续补充说明。mac
下可以注册协议成功,但是调试模式下并不符合预期。centos
下协议直接注册失败...
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。