electron识别处理second-instance事件

本文转载自:https://newsn.net/

electron有两个单例模式的函数(详见文末链接),在相关的项目中,一旦试图打开第二个相同程序的时候,就会触发app.quit()函数。 那么本文的主要内容,就是讲述如何捕获这个第二个实例的初始化事件,并做出相关动作分析,这个事件名称就是second-instance

electron中,如何识别处理second-instance事件?

本文测试环境:[email protected]。本代码在macwin10centos中都测试通过,启动第一个及第二个实例的办法,都是npm start/双击程序体。

前提条件

根据苏南大叔的测试,如果想正常使用本文代码,检测出second-instance事件。那么,前提是:使用了单例模式。那么,您可能需要下面的代码:

const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {

app.quit()

} else {

/*

app.on('second-instance', (event, commandLine, workingDirectory) => {

if (mainWindow) {

if (mainWindow.isMinimized()) mainWindow.restore()

mainWindow.focus()

}

})

*/

app.on('ready', createWindow)

}

相关文章:

测试代码

测试代码如下:

const {app, BrowserWindow,dialog} = require('electron')

//...

app.on('second-instance', (event, argv) => {

dialog.showMessageBox({

title: "second",

message: "second:" + argv.join(""),

});

});

electron中,如何识别处理second-instance事件?

正常的app逻辑里面,并不会这样弹出个dialog出来。所以,请注意分析接收argv参数,这个是后续逻辑处理的关键因素。因为这里苏南大叔并没有相关需求,所以,这里的argv并不做深入处理。

因为相关代码涉及到两个实例,事实上,这个second-instance事件是在第一个实例中触发的,而不是第二个实例。

特殊说明

目前在win10centos测试环境下,通过双击或者npm start都是可以正确触发second-instance事件的。mac的调试环境下,也是可以正确触发second-instance事件的。

electron中,如何识别处理second-instance事件?

second-instance事件,用到的概率不是很大。目前来看,需要特殊注意mac下的情况,至于win10centos,应该都是不会有问题的。

mac下的second-instance事件,和其它操作系统不一样,有特例!具体见如下文章:

centos系统下,在苏南大叔的测试中,并没有能支持electron的注册伪协议。但是,触发second-instance事件的方式,并非只有伪协议一种。所以,centos也是可以检测到second-instance事件的,这个并不矛盾。

总结

本文中针对electronsingle-instance-lock函数,伴发的second-instance事件进行处理。

以上是 electron识别处理second-instance事件 的全部内容, 来源链接: utcz.com/a/118805.html

回到顶部