Electron中单例模式运行app的相关代码

参考官方文档https://www.electronjs.org/docs/api/app?#apprequestsingleinstancelock

其中例举了代码如下:

const { app } = require('electron')
let myWindow = null

const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {
  app.quit()
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到myWindow这个窗口
    if (myWindow) {
      if (myWindow.isMinimized()) myWindow.restore()
      myWindow.focus()
    }
  })

  // 创建 myWindow, 加载应用的其余部分, etc...
  app.on('ready', () => {
  })
}

按照示例代码,可以很快的完成这一功能项但有一种情况比较特殊,需要修改上面的代码
这种场景就是:如果app被隐藏到托盘中时,一般我们都会设置app不可见:myWindow.hide()
此时app是不可见的状态,所以myWindow.restore()myWindow.focus()是没有用的
解决方法:
在聚焦窗口时先调用myWindow.show()方法.
最终代码如下:

const { app } = require('electron')
let myWindow = null

const gotTheLock = app.requestSingleInstanceLock()

if (!gotTheLock) {
  app.quit()
} else {
  app.on('second-instance', (event, commandLine, workingDirectory) => {
    // 当运行第二个实例时,将会聚焦到myWindow这个窗口
    if (myWindow) {
      mainWindow.show()
      if (myWindow.isMinimized()) myWindow.restore()
      myWindow.focus()
    }
  })

  // 创建 myWindow, 加载应用的其余部分, etc...
  app.on('ready', () => {
  })
}

你可能感兴趣的:(Electron)