应用生命周期
app 模块描述整个应用的启动和退出,不是某一个窗口。窗口必须在 ready 之后创建。官方快速开始里的骨架是:
app.whenReady().then(() => {
createWindow();
app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
});
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});
常用事件
| 事件 | 含义 |
|---|---|
ready | Electron 初始化完成,可以创建窗口、注册协议处理器 |
window-all-closed | 所有窗口都已关闭 |
activate | macOS 上点击 Dock 图标且应用已在运行 |
before-quit | 退出流程开始,可以阻止退出 |
will-quit | 窗口已经关闭,适合注销全局快捷键 |
quit | 应用正在退出 |
second-instance | 第二个实例启动,且当前进程持有单实例锁 |
open-url | macOS 上用已注册协议唤起应用 |
login | 网页或 utility 进程遇到 HTTP 基本认证或代理认证 |
macOS 在最后一个窗口关闭后通常保持进程,所以 window-all-closed 里会放过 darwin。用户再点 Dock 时由 activate 重新建窗。Windows 和 Linux 上,最后一个窗口关闭后调用 app.quit()。
必须放在 ready 之前的事
app.requestSingleInstanceLock()protocol.registerSchemesAsPrivileged()app.setPath('userData', ...),用来把测试数据和正式数据分开
ready 之前创建 BrowserWindow 会失败。