Не удается получить доступ к функции закрытия окна в приложении Desktop с помощью node js
Я разрабатываю приложение для рабочего стола Windows с помощью node.js и backbone.js.
Я хочу выполнить действие, когда пользователь закрывает приложение, нажав кнопку закрытия в строке заголовка или щелкнув правой кнопкой мыши приложение из панели задач Windows.
My app.js выглядит так:
var app = module.exports = require('appjs');
app.serveFilesFrom(__dirname + '/content/assets/');
var menubar = app.createMenu([ {
label : '&File',
submenu : [ {
label : 'E&xit',
action : function() {
window.close();
}
},{
label : 'New',
action : function() {
window.test();
}
} ]
}, {
label : '&Window',
submenu : [ {
label : 'Fullscreen',
action : function(item) {
window.frame.fullscreen();
console.log(item.label + " called.");
}
}, {
label : 'Minimize',
action : function() {
console.log("df");
window.frame.minimize();
}
}, {
label : 'Maximize',
action : function() {
console.log("nnnnnnlaaaaaaaaaaaaaaa");
window.frame.maximize();
}
}, {
label : ''// separator
}, {
label : 'Restore',
action : function() {
window.frame.restore();
}
} ]
} ]);
menubar.on('select', function(item) {
console.log("menu item " + item.label + " clicked");
});
var trayMenu = app.createMenu([ {
label : 'Show',
action : function() {
window.frame.show();
},
}, {
label : 'Minimize',
action : function() {
window.frame.hide();
}
}, {
label : 'Exit',
action : function() {
window.close();
}
} ]);
var statusIcon = app.createStatusIcon({
icon : './data/content/icons/32.png',
tooltip : 'AppJS Hello World',
menu : trayMenu
});
var window = app.createWindow({
width : 1024,// 640
height : 768,
showChrome: true,
icons : __dirname + '/content/icons'
});
window.on('create', function() {
console.log("Window Created");
window.frame.show();
window.frame.center();
window.frame.maximize();
window.frame.setMenuBar(menubar);
});
window.on('ready', function() {
console.log("Window Ready");
window.require = require;
window.process = process;
window.module = module;
//window.frame.openDevTools();
window.fileAssoc = process.mainModule.filename;
//window.readMyFile();
function F12(e) {
return e.keyIdentifier === 'F12'
}
function Command_Option_J(e) {
return e.keyCode === 74 && e.metaKey && e.altKey
}
});*/
window.addEventListener('keydown', function(e) {
console.log("hi");
if (F12(e) || Command_Option_J(e)) {
window.frame.openDevTools();
}
});
});
Пожалуйста, найдите прилагаемый скриншот. Я могу выполнять действия над пользовательскими добавленными функциями внутри "Файл" и "Windows".
Но я не знаю, как зафиксировать событие, когда кнопка закрытия приложения по умолчанию в строке заголовка нажата или закрыта, щелкнув правой кнопкой мыши приложение из панели задач Windows. Пожалуйста помоги.
![введите описание изображения здесь]()
Спасибо в Advance
Ответы
Ответ 1
ОБНОВЛЕНО (добавлено еще несколько строк кода, чтобы показать правильный путь к событию)
Вам нужно сделать следующее:
var gui = require("nw.gui");
var win_main = gui.Window.get();
win_main.on('close', function () {
this.hide(); // Pretend to be closed already
alert("Closing...");
// here you detect if data is saved, and if not, ask user if they want to save
this.close(true); // if this line executes the app closes, if not,
// app stays opened
});
Я попробовал выше, и он отлично работает. Он ловит кнопки "Закрыть кнопку" и сочетания клавиш, такие как "Ctrl + F4" в Windows.
Для дальнейшего чтения (перемещено из комментариев):
http://tutorialzine.com/2015/01/your-first-node-webkit-app/
https://nodesource.com/blog/node-desktop-applications
https://gist.github.com/LeCoupa/80eca2716a2b13c37cce
https://github.com/nwjs/nw.js/
https://github.com/nwjs/nw.js/wiki/window
Ответ 2
Наконец, я сделал это, сокрыв строку заголовка по умолчанию и добавив пользовательский.
Для этого я устанавливаю атрибут showChrome в appJs равным false во время создания окна, которое по умолчанию истинно.
Изменение кода
var window = app.createWindow({
width : 1024,// 640
height : 768,
**showChrome: false**,
icons : __dirname + '/content/icons'
});
Но когда атрибут 'showChrome' установлен на ложную панель задач, он также будет скрыт до тех пор, пока мы не уменьшим или не восстановим приложение.