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
相关经验,请点击苏南大叔的文章:
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。