Electron 实例检测

这个功用学名叫什么我也不太清晰,临时就叫她实例检测吧。有时刻我们想点击了快捷方式以后只翻开一个运用程序,然则显现老是严酷的,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环境变量也能够完成呢? 这个是写文章的时刻想到的,有空就试一试咯
(没有校验,有毛病请直接指出来😁)

    原文作者:MARKORMARK
    原文地址: https://segmentfault.com/a/1190000015828516
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞