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')]);
});