我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

苏南大叔最近的文章,讲述了一系列伪协议相关的文章,里面多次涉及到了参数这个概念。不过,这些参数却是看起来类似,实际上有很大不同,并且相互之间有影响关系。在本文中,苏南大叔将对electron伪协议相关代码,进行整体总结。

苏南大叔:electron伪协议,获取URL相关系列参数总结 - electron-fake-protocol-args
electron伪协议,获取URL相关系列参数总结(图1-1)

本文测试环境 :electron@5.0.1/win10

设置的参数(win专享)

用于设置的参数,主要是app.setAsDefaultProtocolClient(protocol[, path, args])中的args

  • args是个数组,是windows系统专用的。
  • args推荐最后压入一个--,这是个安全选项,为了修补漏洞而设置的。
  • args的数据,将影响最终执行exe时的后续参数,进而影响伪协议url的获取方式。

相关文章:

通用的获取url的方式(自己获取自己的url)

被伪协议唤起的程序体,如果想要获得传递进来的url,通用的途径是:

process.argv

但是在window系统下,受到了setAsDefaultProtocolClient中的神秘的args参数影响,通过process.argv获得url的方法,也需要具体问题具体分析。当然,这里也许有个通用的获取方式:

urlStr = process.argv[process.argv.length-1];

相关文章:

第二实例的url获取(首个截获后续的url)

对于启动多个实例的情况,那么处理方式,参照process.argv。但是,如果不能启动多实例,单一实例的情况,(mac默认情况下强制单实例)。对于第二实例的处理,可能有不同的方式。要明确的是:这个第二实例的事件代码,是在第一个实例里面触发的。第二个实例运行的时候,动作只有一个:退出。

const gotTheLock = app.requestSingleInstanceLock()
if (!gotTheLock) { app.quit() }

首先,确保启用了单实例相关代码(mac默认就单实例)。其次,获得url

  • mac生产模式,使用open-url事件,可直接获得相关url
  • wincentos以及调试模式的mac,需要通过second-instance事件,处理argv参数获得url
app.on('second-instance', (event, argv) => {
  console.log(argv[argv.length-1]);
});
app.on('open-url', (event, urlStr) => {
  console.log(urlStr);
});

相关文章:

url进行匹配

无论通过什么方式,拿到url之后,就需要通过转换为URL对象,进行分析处理。下面的是相关范例代码:

const urlObj = new URL(urlStr);       // sunan://222?aa=bb&cc=dd
console.log(urlObj.protocol);         // sunan:
console.log(urlObj.pathname);         // //222
console.log(urlObj.search);           // ?aa=bb&cc=dd
const { searchParams } = urlObj;
console.log(searchParams.get('aa'));  // bb

相关文章:

总结

electron伪协议参数处理的情况,基本上都讲清楚了,大家可以自行实验相关代码。更多苏南大叔带来的electron相关文章,请点击:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

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

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