Je souhaite attraper l'événement de cliquer sur le bouton de fermeture de la fenêtre de l'application dans l'application Electron.
J'essaie de développer l'application Electron pour Mac OSX. Je souhaite masquer la fenêtre de l'application, ne pas fermer l'application lorsqu'un utilisateur clique sur le bouton de fermeture de la fenêtre comme les autres applications Mac.
Cependant, je ne peux pas détecter si le système doit être arrêté ou s'il doit être masqué, car dans tous les cas, un événement close
de browser-window
est appelé lorsqu'un bouton de fermeture est cliqué, le système d'exploitation est arrêté ou l'application se termine avec la commande quit, Cmd+Q
.
Existe-t-il un moyen d'attraper l'événement en cliquant sur le bouton de fermeture de la fenêtre de l'application dans l'application Electron?
Merci de votre aide.
Pour détecter l'événement de cliquer sur un bouton de fermeture, j'ai essayé ce code
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();
});
});
Avec ce code, l'application est masquée lorsqu'un bouton de fermeture de la fenêtre de l'application est cliqué, et l'application se termine lorsque Cmd+Q
est tapé. Cependant, lorsque j'essaie d'arrêter le système d'exploitation, l'événement d'arrêt est empêché.
Vous pouvez l'attraper en utilisant l'événement close
de l'API browser-window . Vous pouvez essayer ce qui suit pour vérifier cela ...
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"]
});
});
});
Pour séparer les fonctionnalités, vous pouvez procéder comme suit ...
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});
// Continue to handle mainWindow "close" event here
mainWindow.on('close', function(e){
if(!force_quit){
e.preventDefault();
mainWindow.hide();
}
});
// You can use 'before-quit' instead of (or with) the close event
app.on('before-quit', function (e) {
// Handle menu-item or keyboard shortcut quit here
if(!force_quit){
e.preventDefault();
mainWindow.hide();
}
});
// Remove mainWindow.on('closed'), as it is redundant
app.on('activate-with-no-open-windows', function(){
mainWindow.show();
});
});
// This is another place to handle events after all windows are closed
app.on('will-quit', function () {
// This is a good place to add tests insuring the app is still
// responsive and all windows are closed.
console.log("will-quit");
mainWindow = null;
});
Le code ci-dessus utilise le before-quit
gestionnaire d'événements pour gérer les événements de "fermeture" de l'application sur l'API de l'application. Les événements de "fermeture" de la fenêtre du navigateur sont toujours gérés sur l'API de la fenêtre du navigateur par mainWindow.on('close')
.
De plus, l'événement will-quit
Est un meilleur endroit pour tester les problèmes avant la fermeture complète de l'application.
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 ---- ')
});
})
Ainsi, vous pouvez attraper l'événement de fermeture