Electron:抛出错误后,如何在弹窗确认后执行app.quit()?
Electron 错误弹窗点击确定后自动退出应用的实现方案
方案1:主进程捕获全局未捕获错误
如果错误发生在主进程,直接监听uncaughtException事件,利用Electron同步的错误弹窗实现需求:
const { app, dialog } = require('electron'); process.on('uncaughtException', (error) => { // 同步弹窗会阻塞代码执行,直到用户点击确定 dialog.showErrorBox('应用出错', error.message); // 用户操作完成后执行退出 app.quit(); });
showErrorBox是同步方法,代码会等待用户点击确定后才继续执行,无需Promise即可实现点击后退出的逻辑。
方案2:渲染进程拦截错误并通知主进程处理
如果错误发生在渲染进程,默认Chrome错误弹窗无法绑定关闭事件,需手动拦截并通过IPC通知主进程处理:
- 渲染进程代码:
const { ipcRenderer } = require('electron'); // 拦截全局错误,阻止默认弹窗弹出 window.addEventListener('error', (event) => { event.preventDefault(); // 向主进程传递错误信息 ipcRenderer.send('handle-fatal-error', event.error.message); });
- 主进程代码:
const { ipcMain, dialog, app } = require('electron'); ipcMain.on('handle-fatal-error', (_, errorMsg) => { // 显示带确定按钮的弹窗,返回Promise监听用户操作 dialog.showMessageBox({ type: 'error', title: '应用出错', message: errorMsg, buttons: ['确定'] }).then(() => { // 用户点击确定后退出应用 app.quit(); }); });
方案3:渲染进程直接调用弹窗(需配置Node集成)
若渲染进程开启了nodeIntegration,也可直接在渲染进程调用弹窗并处理退出(不推荐,易引发权限问题):
const { dialog } = require('electron').remote; window.addEventListener('error', (event) => { event.preventDefault(); dialog.showErrorBox('应用出错', event.error.message); // 弹窗关闭后关闭当前窗口,或通知主进程退出 window.close(); });
内容的提问来源于stack exchange,提问作者lpuccio
相关产品推荐
相关产品推荐

