Electron生命周期
常见应用都有启动、激活、关闭这些事件,Electron 作为一个跨平台的 GUI 框架,为了兼顾不同的场景,需要的事件就会更多。
控制应用程序的事件生命周期。
事件: 'will-finish-launching'
当应用程序完成基础的启动的时候被触发。 在 Windows 和 Linux 中, will-finish-launching
事件与 ready
事件是相同的; 在 macOS 中,这个事件相当于 NSApplication
中的 applicationWillFinishLaunching
提示。
绝大部分情况下,你必须在ready
事件句柄中处理所有事务。
app.on('will-finish-launching',()=>{
console.log(`will-finish-launching`);
})
事件: 'ready'
当 Electron 完成初始化时,发出一次。 在 macOS 上,如果通过通知中心启动应用程序,launchInfo 保存 NSUserNotification 的 userInfo 或 UNNotificationResponse 的信息。 你也可以通过调用 app.isReady() 来检查该事件是否已被触发,以及通过 app.whenReady() 得到一个当Electron已初始化后fulfill 的 Promise。
// 当 app 启动之后,执行窗口创建等操作
app.on('ready', ()=>{
console.log(`ready`);
createWindow()
})
事件: 'dom-ready'
当顶级 frame 的 document 被加载完时触发。
mainWindow.webContents.on("dom-ready", () => {
console.log("dom-ready");
});
Event: 'did-finish-load'
导航完成时触发,即选项卡的旋转器将停止旋转,并指派onload事件后
mainWindow.webContents.on("did-finish-load", () => {
console.log("did-finish-load");
});
事件: 'window-all-closed'
当所有的窗口都被关闭时触发。
如果你没有监听此事件并且所有窗口都关闭了,默认的行为是控制退出程序;但如果你监听了此事件,你可以控制是否退出程序。 如果用户按下了 Cmd + Q,或者开发者调用了 app.quit(),Electron 会首先关闭所有的窗口然后触发 will-quit 事件,在这种情况下 window-all-closed 事件不会被触发。
// 除了 macOS 外,当所有窗口都被关闭的时候退出程序。 因此, 通常
// 对应用程序和它们的菜单栏来说应该时刻保持激活状态,
// 直到用户使用 Cmd + Q 明确退出
app.on("window-all-closed", () => {
console.log(`window-all-closed`);
if (process.platform !== "darwin") app.quit();
});
事件:'before-quit'
在程序关闭窗口前发信号。 调用 event.preventDefault() 将阻止终止应用程序的默认行为。
注意: 如果由 autoUpdater.quitAndInstal() 退出应用程序 ,那么在所有窗口触发 close 之后 才会触发 before-quit 并关闭所有窗口。
注:在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
app.on("before-quit", () => {
console.log("before-quit");
});
事件: 'will-quit'
当所有窗口被关闭后触发,同时应用程序将退出。 调用 event.preventDefault()
将阻止终止应用程序的默认行为。
关于 window-all-closed
和 will-quit
事件之间的差异, 请参见 window-all-closed
事件的说明。
注: 在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
app.on("will-quit", () => {
console.log("will-quit");
});
事件: 'quit'
在应用程序退出时发出。
注:在 Windows 系统中,如果应用程序因系统关机/重启或用户注销而关闭,那么这个事件不会被触发。
app.on("quit", () => {
console.log("quit");
});
事件: 'closed'
在窗口关闭时触发 当你接收到这个事件的时候, 你应当移除相应窗口的引用对象,避免再次使用它.
// 创建浏览窗口
const mainWindow = new BrowserWindow({
width: 800,
height: 600,
webPreferences: {
preload: path.join(__dirname, "preload.js"),
},
});
mainWindow.on("closed", () => {
console.log("closed");
// mainWindow = null
});
转载自:https://juejin.cn/post/7276814487054401573