这个功用学名叫什么我也不太清晰,临时就叫她实例检测吧。有时刻我们想点击了快捷方式以后只翻开一个运用程序,然则显现老是严酷的,electron默许的是完成打包以后每次点击快捷方式都邑天生一个历程实例(除了mac),这个时刻稳住不要慌,他人完成了我们一定也能完成而且还很简朴。
- 起首 我们须要相识Electron的基本知识, 点击看基本 。这里就不赘述了,然后我们就须要晓得我们用Elenton中供应的API了。
接下来我们的主角 <font face=”微软雅黑” color=”red”>app.makeSingleInstance(callback)</font> 就袍笏登场了
此要领使运用程序成为单个实例运用程序, 而不是许可运用程序的多个实例运转, 这将确保只要一个运用程序的实例正在运转, 其他的实例悉数会被停止并退出。 当实行第二个实例时, 第一个实例将运用 callback (argv,workingDirectory) 挪用 callback。 argv 是第二个实例的命令行参数的数组, workingDirectory 是这个实例当前事情目次。 一般, 运用程序会激活窗口而且作废最小化来相应。
/* callback(): Function 回掉函数 */ app.makeSingleInstance(callback) argv String[] // 第二个实例的命令行参数数组 workingDirectory String // 第二个实例的事情目次 // 返回 Boolean.
上面是官方文档给出的诠释,这个API就是为了天生单个实例而存在的。实际上更重要的用途是用来处置惩罚在命令行翻开运用是的限定,实在在mac上经由过程图标翻开尝试启动第二个实例的时刻,体系会自动强制实行单个实例。而且发出 open-file 和 open-url 事宜。然则当用户在命令行中启动运用程序时, 体系的单实例机制将被绕过, 所以我们要用这个要领来保证单实例。
- 实质来说就是在建立electron实例窗口之前,去搜检是不是已存在一个实例,假如有那末就在启动时激活主实例。废话少说上代码
const {app} = require('electron') // 引入主线程
let mianInstance = null
/**
* 实例检测
*/
const moreInstance = app.makeSingleInstance((commandline, workingDirectory) => {
if(mainWindow) { // 假如存在实行以下
// 推断主实例窗口是不是最小化 假如是的话 恢复到之前的状况
if (mainWindow.isMaximized()) mainWindow.restore()
mainWindow.focus() // 主实例窗口focus
}
})
// 推断是不是存在主实例
if (moreInstance) {
// 脱离当前的历程
app.quit()
}
// 主历程预备终了
app.on('ready', () => {
// 建立窗口的要领
})
总结
实在这个方面照样很轻易的,我们也能够发散一下头脑,假如仅仅是检测有无实例 是不是是经由过程Node环境变量也能够完成呢? 这个是写文章的时刻想到的,有空就试一试咯
(没有校验,有毛病请直接指出来😁)