likes
comments
collection
share

Electron生命周期

作者站长头像
站长
· 阅读数 13

常见应用都有启动、激活、关闭这些事件,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
    });