electron识别处理second-instance事件
本文转载自:https://newsn.net/
electron
有两个单例模式的函数(详见文末链接),在相关的项目中,一旦试图打开第二个相同程序的时候,就会触发app.quit()
函数。 那么本文的主要内容,就是讲述如何捕获这个第二个实例的初始化事件,并做出相关动作分析,这个事件名称就是second-instance
。
本文测试环境:[email protected]
。本代码在mac
、win10
及centos
中都测试通过,启动第一个及第二个实例的办法,都是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(""),
});
});
正常的app
逻辑里面,并不会这样弹出个dialog
出来。所以,请注意分析接收argv
参数,这个是后续逻辑处理的关键因素。因为这里苏南大叔并没有相关需求,所以,这里的argv
并不做深入处理。
因为相关代码涉及到两个实例,事实上,这个second-instance
事件是在第一个实例中触发的,而不是第二个实例。
特殊说明
目前在win10
和centos
测试环境下,通过双击或者npm start
都是可以正确触发second-instance
事件的。mac
的调试环境下,也是可以正确触发second-instance
事件的。
second-instance
事件,用到的概率不是很大。目前来看,需要特殊注意mac
下的情况,至于win10
和centos
,应该都是不会有问题的。
mac
下的second-instance
事件,和其它操作系统不一样,有特例!具体见如下文章:
centos
系统下,在苏南大叔的测试中,并没有能支持electron
的注册伪协议。但是,触发second-instance
事件的方式,并非只有伪协议一种。所以,centos
也是可以检测到second-instance
事件的,这个并不矛盾。
总结
本文中针对electron
的single-instance-lock
函数,伴发的second-instance
事件进行处理。
以上是 electron识别处理second-instance事件 的全部内容, 来源链接: utcz.com/a/118805.html