#electron
Вопрос:
У меня есть обычное электронное приложение, использующее React. И я хочу показать приглашение перед закрытием. Ожидаемое поведение-когда я нажимаю кнопку «X», окно должно оставаться открытым и показывать диалоговое окно перед его закрытием, чтобы я мог выбрать, действительно ли я хочу выйти или нет. Но вместо этого происходит вот что Электронное окно закрывается перед отображением диалогового окна. И диалоговое окно закрывается само по себе, прежде чем я нажму какую-либо кнопку. Вот код, включенный в 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, но ничего не нашел.
Ваша помощь была бы признательна.
Ответ №1:
Если вы показываете запрос на подтверждение, вам нужно позвонить e.preventDefault();
в любом случае, чтобы окно оставалось открытым.
Затем, если они нажмут «Да», закройте окно отдельно.
Однако у вас возникает проблема, когда, как только окно закроется после того, как пользователь нажмет «Да», оно снова вызовет 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();
}
}
});