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

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

苏南大叔:electron伪协议,如何在调试模式下进行调试? - electron-fake-protolcal-debug
electron伪协议,如何在调试模式下进行调试?(图6-1)

本文测试环境: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>

苏南大叔:electron伪协议,如何在调试模式下进行调试? - fake-protolcal-error
electron伪协议,如何在调试模式下进行调试?(图6-2)

解决方案就是:
调试模式下的args,需要传递当前项目路径,进而写入注册表。

if (!app.isPackaged) {
  args.push(path.resolve(process.argv[1]));
}

另外,据官方文档,在这里低版本的electron会有个漏洞,解决方案就是:再对args进行一下加工。当然,您也可以使用升级electron最新版的方法,来解决这个问题。

args.push('--');

相关文章是:

  • 大家如果看了官方说明的话,就可以知道:这个最后的args是个windows专属的参数。所以,对于maccentos来说 ,可能就无能为力了。

下面的是个范例代码:

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]),"--"]);
}

苏南大叔:electron伪协议,如何在调试模式下进行调试? - electron-protocal-code
electron伪协议,如何在调试模式下进行调试?(图6-3)

参数args中的--,特殊说明

对于window环境来说,setAsDefaultProtocolClient()中的args参数,最终额外添加的--,这个实际上是可能有后续影响的。

  • 程序不识别额外参数,每次启动状态一致,无需后续处理。
  • 程序根据不同的参数,启动不同的窗体,那么在通过process.argv获得参数的时候,可能需要注意到参数里面多了个--,那么对应的逻辑,需要做些修正。(windows环境有影响)

区分是否是打包模式

这里说的打包模式,指的是如下两种情况:

  • 第一种是:使用npm start或者electron .启动的情况。
  • 第二种是:双击使用electron-builder或者electron-packager的打包结果exe的情况。

代码区分的标准就是:

app.isPackaged

在不同的app.isPackaged状态下,electron参数的传递方式是完全不同的。对于开发者来说,参数的接收也就要分不同的逻辑进行处理了。

苏南大叔:electron伪协议,如何在调试模式下进行调试? - fake-protolcal-params
electron伪协议,如何在调试模式下进行调试?(图6-4)

mac下的调试模式

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

苏南大叔:electron伪协议,如何在调试模式下进行调试? - mac-protocal-debug
electron伪协议,如何在调试模式下进行调试?(图6-5)

electron官方是有个相关描述的,但是苏南大叔暂时没有看明白说的是啥。下面的是相关线索:

注意: 在 macOS 上, 您只能注册已添加到应用程序的 info. plist 中的协议, 在运行时不能对其进行修改。 但是,您可以在构建时使用简单的文本编辑器或脚本更改文件。 有关详细信息,请参阅 Apple's documentation

centos下的调试模式

在苏南大叔的测试中,electron官方提供的setAsDefaultProtocolClient()函数,在centos下,根本就不能注册上伪协议。也许,解决这个问题,需要另辟蹊径了,暂时整体放弃。后续线索是:LSSetDefaultHandlerForURLScheme,暂存。

苏南大叔:electron伪协议,如何在调试模式下进行调试? - centos-fake-protolcal
electron伪协议,如何在调试模式下进行调试?(图6-6)

总结

如果能够在electron的伪协议开发过程中,注意到了如上两点,那么就可以顺利调试了。当然,如果您还是不明白的话,建议您查看下下面的这几篇文章,然后也许会有新的发现。

本文测试环境是win10,暂时还没有在其他操作系统下测试,理论上来说,应该是差不多的。更多electron相关经验,请点击苏南大叔的文章:

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

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

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

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