Javascript 如何捕捉点击应用程序窗口的事件';s电子应用程序中的关闭按钮

Javascript 如何捕捉点击应用程序窗口的事件';s电子应用程序中的关闭按钮,javascript,electron,Javascript,Electron,我想在Electron应用程序中捕捉点击应用程序窗口关闭按钮的事件 我正在尝试为MacOSX开发Electron应用程序。 我想隐藏应用程序窗口,而不是像其他Mac应用程序一样,在用户单击窗口的关闭按钮时终止应用程序 但是,我无法检测系统是应该终止还是应该隐藏,因为在任何情况下,当单击关闭按钮、关闭操作系统或使用退出命令终止应用程序时,Cmd+Q都会调用browser window的close事件 在Electron应用程序中,是否有方法捕获单击应用程序窗口关闭按钮的事件 谢谢你的帮助 后记

我想在Electron应用程序中捕捉点击应用程序窗口关闭按钮的事件

我正在尝试为MacOSX开发Electron应用程序。 我想隐藏应用程序窗口,而不是像其他Mac应用程序一样,在用户单击窗口的关闭按钮时终止应用程序

但是,我无法检测系统是应该终止还是应该隐藏,因为在任何情况下,当单击关闭按钮、关闭操作系统或使用退出命令终止应用程序时,
Cmd+Q
都会调用
browser window
close
事件

在Electron应用程序中,是否有方法捕获单击应用程序窗口关闭按钮的事件

谢谢你的帮助


后记 为了检测单击关闭按钮的事件,我尝试了以下代码

var app = require('app');
var BrowserWindow = require('browser-window');
var Menu = require('menu');

var force_quit = false;

var menu = Menu.buildFromTemplate([
  {
    label: 'Sample',
    submenu: [
      {label: 'About App', selector: 'orderFrontStandardAboutPanel:'},
      {label: 'Quit', accelerator: 'CmdOrCtrl+Q', click: function() {force_quit=true; app.quit();}}
    ]
  }]);

app.on('window-all-closed', function(){
    if(process.platform != 'darwin')
        app.quit();
});

app.on('ready', function(){

    Menu.setApplicationMenu(menu);

    mainWindow = new BrowserWindow({width:800, height:600});

    mainWindow.on('close', function(e){
        if(!force_quit){
            e.preventDefault();
            mainWindow.hide();
        }
    });

    mainWindow.on('closed', function(){
        console.log("closed");
        mainWindow = null;
        app.quit();
    });

    app.on('activate-with-no-open-windows', function(){
        mainWindow.show();
    });
});

使用此代码,当单击应用程序窗口的关闭按钮时,应用程序被隐藏,当键入
Cmd+Q
时,应用程序被终止。但是,当我尝试关闭操作系统时,会阻止关闭事件

您可以使用api的
close
事件捕获它。您可以尝试以下方法来验证这一点

var app = require('app');

var force_quit = false;

app.on('ready', function () {        
    mainWindow = new BrowserWindow({ width: 800, height: 600 });

    mainWindow.on('close', function() { //   <---- Catch close event

        // The dialog box below will open, instead of your app closing.
        require('dialog').showMessageBox({
            message: "Close button has been pressed!",
            buttons: ["OK"]
        });
    });
});
上述代码使用退出前的
来处理应用程序api上的应用程序“关闭”事件。浏览器窗口“关闭”事件仍由
mainWindow.on('close')
在浏览器窗口api上处理

此外,
将退出
事件是在应用程序完全关闭之前测试问题的更好地方

app.on('ready', ()=> {
let win = new BrowserWindow({width:800, height:600}) 
win.loadURL('file://'+__dirname+'/index.html')
win.on('closed', () => {
    console.log(' ---- Bye Bye Electron ---- ')
  });
})

这样您就可以赶上闭幕式了

谢谢您的回复!!我尝试了您的代码,但是我发现当单击关闭按钮或键入
Cmd+Q
时,会捕捉到
close
事件。此外,此事件在操作系统关闭时被缓存。。。我只想在单击关闭按钮时检测
…调用app.quit()时,应用程序会在终止之前尝试关闭所有窗口。在主窗口的“关闭”事件中,您还有第二个app.quit()。这可能会引起问题。查看我的更新答案和您的代码。再次感谢您的帮助!我尝试了您的代码,发现单击关闭按钮时只调用
close''事件,操作系统关闭时调用
before quit''事件和`` close''事件。非常感谢你“不打开窗口激活”已替换为“激活”
app.on('ready', ()=> {
let win = new BrowserWindow({width:800, height:600}) 
win.loadURL('file://'+__dirname+'/index.html')
win.on('closed', () => {
    console.log(' ---- Bye Bye Electron ---- ')
  });
})