我不想退出应用程序,而是想在单击系统关闭按钮时隐藏主窗口,并在单击或激活应用程序时显示主窗口。我正在使用以下代码在我的 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()
})
但是,在 activate
和 closed
事件中隐藏和显示窗口会显示以下错误,并且在应用程序处于事件状态时从不显示主窗口。
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/