Electron :BrowserWindow.on关闭提示不起作用

标签 electron

我有一个使用 React 的普通 Electron 应用程序。我想在关闭之前显示一个提示。 预期的行为是当我单击“X”按钮时,窗口必须保持打开状态并在关闭之前显示对话框,以便我可以选择是否确实要退出。 但相反,这就是发生的情况issue with electron Electron 窗口在显示对话框之前关闭。在我单击任何按钮之前,该对话框会自行关闭。 这是 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 上是否有一些有用的问题,但没有发现。 我们将不胜感激您的帮助。

最佳答案

如果显示确认提示,则需要调用 e.preventDefault(); 无论哪种方式都可以保持窗口打开。

然后,如果他们单击"is",请单独关闭窗口。

但是您会遇到一个问题,一旦用户单击"is"后窗口关闭,它将再次触发 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();
        }
    }
});

关于 Electron :BrowserWindow.on关闭提示不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69247666/

相关文章:

javascript - 如何使用 Electron 标签的webview作为从浏览器窗口到标签的通信?

javascript - Angular 在自己的 Controller 中处理事件

electron - 在Electron中打开带有扩展名的文件

javascript - 无法使用vuejs和electronicjs创建简单的文件资源管理器

node.js - 使用 webpack 为 Electron 应用程序捆绑错误 `Cannot resolve module ' electron'`

javascript - 基于数据属性的Appendchild

webpack - Electron+Webpack = 找不到模块 : Error: Can't resolve fsevents/fs/etc in chokidar/etc

Electron(Atom Shell)应用程序图标

node.js - 我在fedora 30上安装 Electron 版时出错

javascript - 将 CSS 注入(inject) <webview> Chrome/Electron/HTML/CSS/JS