- 私はライティング アプリケーションを作成しています。ユーザーはアプリを開いてテキストを書き込み、作業内容を保存するなどを行うことができます。
window close
ボタンをクリックすると、ユーザーに (a) 作業内容を保存する (必要な場合)、または (b) 終了するかを選択するよう求めるメッセージが表示されるようにしたいと考えています。- これを達成するためにを使用しようとしています
window.beforeunload
が、ループに陥ってしまい、「終了」しようとすると同じプロンプトが無限に表示されることに気付きました。
ここにコードがあります:
windowCloseCheck() {
window.onbeforeunload = function(e) {
e.returnValue = false;
// window.alert('try to close me');
if(file.isUnsaved() || file.hasChanged()) {
// prompt - save or just quit?
file.fileWarning('You have unsaveeed work.', 'Save', 'Quit', function(){
// OPTION A - save
file.save();
}, function() {
// OPTION B: Quit.
ipcRenderer.send('quitter')
})
}
else {
// file is saved and no new work has been done:
ipcRenderer.send('quitter')
}
windowCloseCheck
アプリケーションがセットアップされると呼び出され、ウィンドウを閉じるためのイベント リスナーを開始します。条件は、ファイルが保存されていないか、元のファイルから変更されているかどうかをチェックすることです。
fileWarning
は、electron ダイアログ ボックスをラップして、2 つの選択肢と各選択肢に対して呼び出すそれぞれの関数を含むポップアップを表示する関数です。
残りのコードは利用可能必要な情報が(おそらく)抜けているかもしれません。明確でない場合は、喜んでご説明いたします。
ベストアンサー1
ブラウザウィンドウを定義した関数内に次のブロックを追加してください(私の場合はmain.jsで宣言されたcreateWindow()関数です)
// Create the browser window.
mainWindow = new BrowserWindow({width: 400, height: 400})
mainWindow.on('close', function(e){
var choice = require('electron').dialog.showMessageBox(this,
{
type: 'question',
buttons: ['Yes', 'No'],
title: 'Confirm',
message: 'Are you sure you want to quit?'
});
if(choice == 1){
e.preventDefault();
}
});