苏南大叔接着描述electron中伪协议的参数处理,即调起electron程序之后,程序体如何根据参数的不同,做出进一步的操作,也就是说识别伪协议中的url部分。需要注意的是:这里的argssetAsDefaultProtocolClient()中的最后一个参数args是没有什么关系的,请不要把两者弄混淆。

electron伪协议,如何接收识别协议URL? - electron-args
electron伪协议,如何接收识别协议URL?(图2-1)

本文测试环境:win10electron@5.0.1。本文的前置阅读文章是:

参数args来源

对于args的数据来源处理,苏南大叔能够描述的就是:还是取下面这个变量:

process.argv

简要的来说,就是要根据是否是生产模式,来判断传递进来的数据数组,然后再进行组合获得参数,最后再对参数进行分析。

let urlStr = process.argv.splice(app.isPackaged ? 1 : 2).join("")

这里有篇相关文章,大家可以参考一下:

在这里,苏南大叔做个简要的对比:

  • 命令行传值,传递的是空格分隔的字符串。
  • 通过html的伪协议传递的参数,传递的是类似url的路径加参数的字符串。

所以,在通过伪协议传值的情况,还需要对process.argv的某个数组成员,进行url解析。

解析url

当然称这个伪协议的字符串为url,似乎在接受程度上,会有些折扣。不过,对于这个字符串,苏南大叔也找不到更好的词语来描述。鉴于在解析的时候,也是使用jsurl解析函数进行处理的。所以,这里还是称之为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

使用new URL()进行解析,使用searchParams.get()可以获得参数值。

测试代码

主进程main.js:

const {app,BrowserWindow} = require('electron')
//...
function createWindow () {
  //...
  global.sharedObject = {
    args: process.argv.splice(app.isPackaged ? 1 : 2).join(""),
  }
  mainWindow.webContents.openDevTools();
  //...
}
//...

渲染进程:

var urlStr = require('electron').remote.getGlobal('sharedObject').args;
console.log(urlStr);
const urlObj = new URL(urlStr);
console.log(urlObj.protocol);
console.log(urlObj.pathname);
console.log(urlObj.search);
const { searchParams } = urlObj;
console.log(searchParams.get('aa'));
console.log(searchParams.get('bb'));

第三方网页html

<a href="sunan://222?aa=bb&cc=dd">111222</a>

效果图:

electron伪协议,如何接收识别协议URL? - url参数解析
electron伪协议,如何接收识别协议URL?(图2-2)

对于正常的代码逻辑来说,上述代码就是个例子,实际的逻辑处理,还需要您自己来根据实际情况来处理。所以,千万别盲目复制照抄哦。想想,每句话都是什么意思。搞明白了,再复制。

关联文章

本文范例中,使用了下面的electron文章中的相关代码技巧:

总结

本文从识别伪协议URL的角度来描述本文的内容,如果您是在高版本electron及生产模式下,使用本文的代码的话,那么,本文的代码就足够了。为什么这么说,那是因为有很多的特殊情况嘛。想知道很多特殊情况,怎么处理的话,请查看苏南大叔的后续文章。

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

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

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

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