Закрыть окно из программы позволяет метод close()
объекта окна. Эффект аналогичен нажатию пользователем кнопки Закрыть в заголовке окна. В листинге 2.1 мы как раз воспользовались этим методом, ведь заголовок окна отсутствует, а с ним отсутствует и кнопка Закрыть:
ipcMain.on('event-win-close', (e) => {
if (win) win.close();
});
При попытке закрытия окна генерируются следующие события:
close
— возникает перед закрытием окна с помощью кнопки Закрыть в заголовке окна или при вызове метода close()
. Генерируется перед событиями beforeunload
и unload
из DOM;closed
— событие после закрытия окна.В некоторых случаях нужно предотвратить закрытие окна. Например, если пользователь не сохранил данные. Для этого внутри обработчика события close
следует вызвать метод preventDefault()
через объект события:
let n = 0;
win.on('close', (e) => {
if (n < 2) {
e.preventDefault(); // Предотвращаем закрытие окна
}
n++;
});
Внутри обработчика события beforeunload
можно присвоить любое значение, отличное от undefined
, свойству returnValue
объекта события:
let x = 0;
window.onbeforeunload = function(e) {
if (x < 1) e.returnValue = false; // Предотвращаем закрытие окна
x++;
};
Если при создании окна опции closable
было присвоено значение false
, то кнопка Закрыть в заголовке окна будет недоступна. Управлять опцией после создания объекта окна позволяют методы setClosable(true | false)
и isClosable()
.