2017-08-14 18 views
2

私は電子メールでアプリケーションを書いています。ユーザーが保存されていないファイルを開いている場合、保存する前にプロンプ​​トを出したいと思います。私は、このサンプルコードをオンラインで見つかりました電子はメインウィンドウが閉じないようにします

window.onbeforeunload = (e) => { 
     var answer = confirm('Do you really want to close the application?'); 
     e.returnValue = answer; // this will *prevent* the closing no matter what value is passed 
     if(answer) { mainWindow.destroy(); } // this will close the app 
    }; 

はい、キャンセルダイアログまたはXボタンが表示されてから数秒以内に押された場合しかし、あなたは少しのために、画面上のダイアログ休みをさせた場合、[OK]をクリックします。このコードは、妙に動作します押されていてもアプリケーションは終了するボタンです。

このコードは、index.htmlを

答えて

0

本当に奇妙な行動によって呼び出された私のメインのスクリプトファイルに位置しています!なぜそれが起こっているのか説明することはできませんが、メインプロセスで回避策を実装できます。

電子のdialogモジュールを使用して、電子と同じ確認ダイアログを作成することができます。これは期待どおりに動作します。

main.js

const { app, BrowserWindow, dialog } = require('electron') 
const path = require('path') 

app.once('ready',() => { 
    let win = new BrowserWindow() 
    win.loadURL(path.resolve(__dirname, 'index.html')) 
    win.on('close', e => { 
    let choice = dialog.showMessageBox(
     win, 
     { 
     type: 'question', 
     buttons: ['Yes', 'No'], 
     title: 'Confirm', 
     message: 'Do you really want to close the application?' 
     } 
    ) 
    if (choice === 1) e.preventDefault() 
    }) 
}) 
0

デベロッパーツールのウィンドウがアクティブ化されている場合にのみ可能であるかもしれません。

いずれにしても、上記で提案されているように、イベントを近づけることをおすすめします。これは今のところ最良のアプローチです。

しかし、e.preventDefault()がコードのどこにでも広がっていることに注意してください。 preventDefault()を正しく管理したら、変数e.defaultPrevented = falseを有効にして、アプリの自然な動作に戻す必要があります。

実際には、e.preventDefault()の機能は、変数e.defaultPreventedtrueの値を変更するまで有効です。

関連する問題