electron伪协议,如何在调试模式下进行调试?
发布于 作者:苏南大叔 来源:程序如此灵动~
苏南大叔的前几篇有关electron伪协议文章中,如果大家仔细阅读了的话,就会发现:苏南大叔一直在强调是生产模式。那也就是在暗示大家,如果不是生产模式的话,这里可能会出现与预期不太相符的情况。这个问题的产生原因,还主要要归结于生产模式和调试模式的参数传递方式的根本区别。

本文测试环境:win10/electron@5.0.1。
注册伪协议的args
从苏南大叔的上一篇文章中,大家可以知道,注册一个新的伪协议的方法是:
app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, args);详情请点击:
这里有个可选参数args,如果设置为默认的[],那么在调试模式下,您可能会看到如下类似的错误提示:
Error launching app
Unable to find Electron app at <path>\<url>
Cannot find module <path>\<url>
解决方案就是:
调试模式下的args,需要传递当前项目路径,进而写入注册表。
if (!app.isPackaged) {
args.push(path.resolve(process.argv[1]));
}另外,据官方文档,在这里低版本的electron会有个漏洞,解决方案就是:再对args进行一下加工。当然,您也可以使用升级electron最新版的方法,来解决这个问题。
args.push('--');相关文章是:
- 大家如果看了官方说明的话,就可以知道:这个最后的
args是个windows专属的参数。所以,对于mac和centos来说 ,可能就无能为力了。
下面的是个范例代码:
const {app,BrowserWindow} = require('electron')
const path = require("path")
if(app.isPackaged){
app.setAsDefaultProtocolClient("sunan",process.execPath,["--"]);
}
else{
app.setAsDefaultProtocolClient("sunan",process.execPath,[path.resolve(process.argv[1]),"--"]);
}
参数args中的--,特殊说明
对于window环境来说,setAsDefaultProtocolClient()中的args参数,最终额外添加的--,这个实际上是可能有后续影响的。
- 程序不识别额外参数,每次启动状态一致,无需后续处理。
- 程序根据不同的参数,启动不同的窗体,那么在通过
process.argv获得参数的时候,可能需要注意到参数里面多了个--,那么对应的逻辑,需要做些修正。(windows环境有影响)
区分是否是打包模式
这里说的打包模式,指的是如下两种情况:
- 第一种是:使用
npm start或者electron .启动的情况。 - 第二种是:双击使用
electron-builder或者electron-packager的打包结果exe的情况。
代码区分的标准就是:
app.isPackaged在不同的app.isPackaged状态下,electron参数的传递方式是完全不同的。对于开发者来说,参数的接收也就要分不同的逻辑进行处理了。

mac下的调试模式
暂时放弃,因为加载不到项目根目录下的主进程代码,打开的时候,还是会到electron的默认页面上去。windows系统的解决方案,并不能生效。

electron官方是有个相关描述的,但是苏南大叔暂时没有看明白说的是啥。下面的是相关线索:
注意: 在 macOS 上, 您只能注册已添加到应用程序的 info. plist 中的协议, 在运行时不能对其进行修改。 但是,您可以在构建时使用简单的文本编辑器或脚本更改文件。 有关详细信息,请参阅 Apple's documentation
centos下的调试模式
在苏南大叔的测试中,electron官方提供的setAsDefaultProtocolClient()函数,在centos下,根本就不能注册上伪协议。也许,解决这个问题,需要另辟蹊径了,暂时整体放弃。后续线索是:LSSetDefaultHandlerForURLScheme,暂存。

总结
如果能够在electron的伪协议开发过程中,注意到了如上两点,那么就可以顺利调试了。当然,如果您还是不明白的话,建议您查看下下面的这几篇文章,然后也许会有新的发现。
- https://newsn.net/say/fake-protocol-win.html
- https://newsn.net/say/electron-process-argv.html
- https://newsn.net/say/which-one-electron.html
本文测试环境是win10,暂时还没有在其他操作系统下测试,理论上来说,应该是差不多的。更多electron相关经验,请点击苏南大叔的文章: