рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдореЗрдВ beforeunload
рдШрдЯрдирд╛, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓рдЧ рддрд░рд╣ рд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреА рд╣реИред рдЕрдЧрд░ рдореИрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддрд╛ рд╣реВрдВ рддреЛ рдпрд╣ рдПрдХ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рд╕рдВрд╡рд╛рдж рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ BrowserWindow
рдЖрдк beforeunload
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдореЗрдВ рдЖрдк рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдкреБрд╖реНрдЯрд┐рдХрд░рдг рд╕рдВрд╡рд╛рдж рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ:
// рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк рдбрд╛рдпрд▓реЙрдЧ рдПрдкреАрдЖрдИ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдХреНрдпрд╛ рд╕рдВрд╡рд╛рдж API рдХреЗрд╡рд▓ рдореБрдЦреНрдп рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИ?
рд╕рд╛рдорд╛рдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИ?
рдХреЛрдИ рдмрд╛рдд рдирд╣реАрдВред рдореИрдВ рдпрд╣ рд╕рдордЭ рдЧрдпрд╛ред
рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
window.onbeforeunload = function(e) {
var remote = require('remote');
var dialog = remote.require('dialog');
var choice = dialog.showMessageBox(
remote.getCurrentWindow(),
{
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Are you sure you want to quit?'
});
return choice === 0;
};
рдирдорд╕реНрддреЗ(:
рдКрдкрд░ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдорд╛рдзрд╛рди рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЕрднреА рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ "onbeforeunload" рдХреЛ рд▓реЗрддрд╛ рд╣реИ ...
рдХреЛрдИ рд╡рд┐рдЪрд╛рд░?
@shneorasa рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЧрдП рдХреБрдЫ рдорд╣реАрдиреЗ рд╣реЛ рдЧрдП рд╣реИрдВ (рдФрд░ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЕрдм рддрдХ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ window.onbeforeload
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
beforeunload
рдИрд╡реЗрдВрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╡рд╛рджреЛрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХрд╛ рдРрдк рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреВрд▓рд┐рдпрди рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рд╣реИ:
// Inside main/index.js
import { app, BrowserWindow, dialog } from 'electron'
app.showExitPrompt = true
рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ BrowserWindow
рдХреЗ close
рдИрд╡реЗрдВрдЯ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
// Inside main/index.js, where BrowserWindow is initialized
mainWindow.on('close', (e) => {
if (app.showExitPrompt) {
e.preventDefault() // Prevents the window from closing
dialog.showMessageBox({
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Unsaved data will be lost. Are you sure you want to quit?'
}, function (response) {
if (response === 0) { // Runs the following if 'Yes' is clicked
app.showExitPrompt = false
mainWindow.close()
}
})
}
})
рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ Vue.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдирд╛/рдЫрд┐рдкрд╛рдирд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ app
:
const { app } = require('electron').remote
рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдмреВрд▓рд┐рдпрди рдорд╛рди рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛:
app.showExitPrompt = true
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
@shneorasa рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреВрдЫреЗ рдЧрдП рдХреБрдЫ рдорд╣реАрдиреЗ рд╣реЛ рдЧрдП рд╣реИрдВ (рдФрд░ рдЖрдкрдХреЛ рд╢рд╛рдпрдж рдЕрдм рддрдХ рдПрдХ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ), рд▓реЗрдХрд┐рди рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдХреА рддрд▓рд╛рд╢ рдХрд░рдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ
window.onbeforeload
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛beforeunload
рдИрд╡реЗрдВрдЯ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╡рд╛рджреЛрдВ рдХреЛ рдЧрдбрд╝рдмрдбрд╝ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдЖрдкрдХрд╛ рдРрдк рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдЕрдкрдиреЗ рдРрдк рдХреЗ рдЕрдВрджрд░ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдмреВрд▓рд┐рдпрди рд╕реНрдЯреЛрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдореИрдВрдиреЗ рдХрд┐рдпрд╛ рд╣реИ:рдЗрд╕рдХреЗ рд╕рд╛рде, рдЖрдк рдЕрдкрдиреЗ
BrowserWindow
рдХреЗclose
рдИрд╡реЗрдВрдЯ рдХреЛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдмрд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╛рдзрд╛рди рдХреЛ Vue.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрди рдРрдк рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рд╕рдВрд╡рд╛рдж рджрд┐рдЦрд╛рдирд╛/рдЫрд┐рдкрд╛рдирд╛ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реИ
app
:рдФрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдмреВрд▓рд┐рдпрди рдорд╛рди рдХреЛ рдЕрдзрд┐рд▓реЗрдЦрд┐рдд рдХрд░рдирд╛: