本文中,苏南大叔将要说明,如何在electron中实现伪协议。通过本文的学习,您就可以在网页里面,拉起你本地的electron程序了。当然,还可以根据伪协议传递的不同参数,而做出不同的具体electron行为,本文中的功能代码可以说是非常实用了,建议大家多多练习。

electron如何注册伪协议?伪协议的检测及删除 - electron-fake-protocal
electron如何注册伪协议?伪协议的检测及删除(图2-1)

本文测试环境:win10electron@5.0.1。本文内容,支持macwindows,在苏南大叔的测试中,暂时不支持centos。支持macwindows的函数中,部分参数仅仅支持windows

设置伪协议

开启伪协议的代码非常简单,以注册一个伪协议sunan为例,就如下几行就可以了。

主进程main.js

const {app} = require('electron')
app.setAsDefaultProtocolClient("sunan");

函数的原型是:

app.setAsDefaultProtocolClient(protocol[, path, args])

所以,大家可以看到:

  • 第二个参数path是可选的,默认值是:process.execPath
  • 第三个参数是args也是可选的。并且当且仅当win系统的时候args才生效,默认值是[],具体的使用方式,暂时未知。

所以,上面的函数等同于如下变形:

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);

electron如何注册伪协议?伪协议的检测及删除 - protocol-demo-code
electron如何注册伪协议?伪协议的检测及删除(图2-2)

总结

win系统中,伪协议的实现,是通过写注册表的方式来实现的。注册表的写入操作,共有两次写入。可能会被360之类的软件拦截掉,所以,请注意允许相关的注册表操作才可以。

详细的原理描述,可以参见下面的链接:

如果您需要根据不同的参数,进一步区分electron的后续行为的话,您还需要对传递过来的参数做进一步的处理。

本文的测试环境是win10,在其他的操作系统中,实际上还是有特殊情况的。所以,本文就做个开山篇,对于其他操作系统的特殊情况,苏南大叔会做后续补充说明。mac下可以注册协议成功,但是调试模式下并不符合预期。centos下协议直接注册失败...

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留链接作者。
本站采用创作共用版权协议, 要求署名、非商业用途和相同方式共享。
转载本站内容必须也遵循“署名-非商业用途-相同方式共享”的创作共用协议。
未经许可,规模化镜像抄袭本站内容的行为,将会根据有关法律法规进行维权。
程序如此灵动~》下所有原创文章,如被用于商业用途,请您按规定支付稿费。

 【源码】本文代码片段及相关软件,请点此获取

 【绝密】秘籍文章入口,仅传授于有缘之人   electron    protocal

本站的忠实读者小伙伴,正在阅读下面这些文章: