跳到主要内容

Electron 应用启动事件监听

在 Electron 应用开发过程中,我们经常需要监听应用的启动事件,以便在应用启动的不同阶段执行特定的逻辑。

ready 事件

当 Electron 完成初始化时会触发 ready 事件。此时,主进程已经创建了浏览器窗口,但窗口内的网页还没有开始加载。我们通常在 ready 事件的监听函数中执行以下操作:

创建和显示应用主窗口 注册全局快捷键、托盘图标等 执行应用初始化逻辑,如检查更新、加载配置等

示例代码

const { app } = require('electron');

app.whenReady().then(() => {
// 创建窗口
createWindow();

// 注册全局快捷键
globalShortcut.register('CommandOrControl+X', () => {
console.log('CommandOrControl+X is pressed');
});
});

activate 事件

activate 事件是 macOS 特有的事件,在 Electron 应用被激活时触发。如果用户点击 Dock 上的应用图标,或者使用 Cmd + Tab 切换到该应用,就会触发 activate 事件。

activate 事件的监听函数中,我们通常需要判断当前是否有可见的窗口,如果没有则创建新窗口:

app.on('activate', () => {
if (BrowserWindow.getAllWindows().length === 0) {
createWindow();
}
});

second-instance 事件

对于大多数桌面应用来说,我们期望它是单例模式的,即在系统中只允许运行一个应用实例。当用户再次点击应用图标时,不会启动新的进程,而是激活已有的应用窗口。

要实现单例模式,需要用到 second-instance 事件。当第二个应用实例启动时,会触发这个事件。在事件监听函数中,我们可以将启动参数发送给主实例,并退出当前进程。

示例代码

const gotTheLock = app.requestSingleInstanceLock();

if (!gotTheLock) {
app.quit();
} else {
app.on('second-instance', (event, commandLine, workingDirectory) => {
// 将启动参数发送给主实例
sendArgsToMainInstance(commandLine);
// 激活主实例窗口
activateMainWindow();
});
}

session-created 事件

session-created 事件在 Electron 创建新的 session 对象时触发。通过监听这个事件,我们可以对每个 session 进行一些自定义配置,如:

设置 session 的 cookie、缓存策略 注入一些预置的脚本 修改 User-Agent 拦截网络请求,实现自定义协议等

示例代码

const { session } = require('electron');

app.on('session-created', (session) => {
// 设置 cookie
session.cookies.set({
url: 'https://example.com',
name: 'dummy_name',
value: 'dummy',
});

// 注入预置脚本
session.setPreloads([path.resolve(app.getAppPath(), 'preload.js')]);
});