Uso Electron v13.0.1 de este repositorio
Necesita confirmación de cierre, use esta implementación:
win.on('close', function (e) { require('electron').dialog.showMessageBox(this, { type: 'question', buttons: ['Yes', 'No'], title: 'Confirm', message: 'Are you sure you want to quit?' }).then(function (data) { if (data.response === 0) { e.preventDefault(); } }); });Pero cuando hago clic en el botón de cerrar, el cuadro de diálogo aparece en segundo lugar y la aplicación se cierra sin confirmación ni rechazo. En otras palabras, el diálogo no crea una conjunción para cerrar.
¿Cuál es el problema con mi solución?
El problema es que está llamando a un método asíncrono y la función de evento continúa ejecutándose y finalmente regresa, antes de que se proporcione ninguna entrada del usuario.
Una forma de resolver esto es usar la función showMessageBoxSync para la operación síncrona. Esto esperará hasta que el usuario seleccione una opción antes de continuar con la ejecución. Como abajo:
const { dialog } = require('electron'); win.on('close', function (e) { let response = dialog.showMessageBoxSync(this, { type: 'question', buttons: ['Yes', 'No'], title: 'Confirm', message: 'Are you sure you want to quit?' }); if(response == 1) e.preventDefault(); });