javascript - 在 Electron 上显示和隐藏主窗口

标签 javascript electron

我不想退出应用程序,而是想在单击系统关闭按钮时隐藏主窗口,并在单击或激活应用程序时显示主窗口。我正在使用以下代码在我的 Electron 应用程序上执行此操作:

'use strict'

import { app, BrowserWindow } from 'electron'

let mainWindow
const winURL = process.env.NODE_ENV === 'development'
  ? `http://localhost:${require('../../../config').port}`
  : `file://${__dirname}/index.html`

function createWindow () {
  /**
   * Initial window options
   */
  mainWindow = new BrowserWindow({
    height: 620,
    width: 350,
    resizable: true,
    fullscreenable: true
  })

  mainWindow.loadURL(winURL)

  mainWindow.on('closed', () => {
    mainWindow.hide()
  })

  // eslint-disable-next-line no-console
  console.log('mainWindow opened')
}

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  mainWindow.show()
})

但是,在 activateclosed 事件中隐藏和显示窗口会显示以下错误,并且在应用程序处于事件状态时从不显示主窗口。

Uncaught Exception:
Error: Object has been destroyed
    at BrowserWindow.<anonymous> (/app/src/main/index.js:24:16): mainWindow.on('closed')

不知道还能做什么。

最佳答案

我的解决方案是这样的:

import { app, BrowserWindow } from 'electron'

let win = null

function createWindow () {
  win = new BrowserWindow({width: 1024, height: 768})
  win.loadURL('...')
  win.webContents.openDevTools()
  win.on('close', (event) => {
    if (app.quitting) {
      win = null
    } else {
      event.preventDefault()
      win.hide()
    }
  })
}

app.on('ready', createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => { win.show() })

app.on('before-quit', () => app.quitting = true)

以这种方式在 OSX 上,如果您关闭窗口,窗口会简单地隐藏,如果您使用 cmd+Q 关闭应用程序,应用程序将终止。

关于javascript - 在 Electron 上显示和隐藏主窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42988166/

相关文章:

javascript - 创建独立的职位发布组件

javascript - 在 Electron 应用程序中访问 USB 内存棒失败,错误代码为 : No device selected exception

javascript - 正则表达式只捕获第一行

javascript - Spectron 测试顺序 Action

php - 使用客户端空闲计时器的安全性如何/大型网络应用程序开发人员如何做到这一点?

javascript - jquery 无法删除数据表中的多行

node.js - 用于监控 Electron 应用的工具

electron - 运行cmd.exe并使用Electron.js进行一些命令

electron - 通过ElectronJs中的子菜单项关闭当前窗口

visual-studio-code - 可以将 Visual Studio Code 配置为启动 Electron 吗