首页 > 解决方案 > 电子:BrowserWindow.on 关闭提示不起作用

问题描述

我有一个使用 React 的普通电子应用程序。我想在关闭之前显示一个提示。预期的行为是当我单击“X”按钮时,窗口必须保持打开状态并在关闭之前显示对话框,以便我可以选择是否真的要退出。但相反,这就是发生电子问题 的情况电子窗口在显示对话框之前关闭。在我单击任何按钮之前,对话框会自行关闭。这是 main.dev.ts 中包含的代码


 mainWindow.on('close',(e) => {
  var choice = dialog.showMessageBox(mainWindow,
    {
      type: 'question',
      buttons: ['Yes', 'No'],
      title: 'Confirm',
      message: 'Are you sure you want to quit?'
   });
   if(choice == 1){
     e.preventDefault();
   }});

我已经检查过 stackoverflow 上是否有一些帮助问题,但没有找到。您的帮助将不胜感激。

标签: electron

解决方案


如果您显示确认提示,您需要调用e.preventDefault();任何一种方式来保持窗口打开。

然后,如果他们单击“是”,请单独关闭窗口。

但是,您会遇到一个问题,即一旦用户单击“是”后窗口关闭,它将close再次触发事件,从而导致无限循环。我已经用hasConfirmedClose下面的变量解决了这个问题。

这是可行的:

var hasConfirmedClose = false;
mainWindow.on('close', (e) => {
    if (!hasConfirmedClose) {
        e.preventDefault(); // Prevent default no matter what.
        var choice = dialog.showMessageBox(mainWindow, {
            type:    'question',
            buttons: ['Yes', 'No'],
            title:   'Confirm',
            message: 'Are you sure you want to quit?'
        });
        if (choice == 1) {
            hasConfirmedClose = true;
            mainWindow.close();
        }
    }
});

推荐阅读