2016-03-18 17 views
3

ユーザーが閉じると(たとえば、ユーザーが「閉じる」ボタンをクリックした直後など)、一部のデータを保存する必要のあるElectronアプリケーションがあります。アプリケーションを閉じてレンダラープロセスに通知する

データはレンダリングプロセスで使用できるため、アプリケーションが終了する前に通知を受ける必要があります。

Electron API for Browser Windowにはcloseの方法が記載されていますが、これはレンダラーのものではなく、メインプロセスで行われているようです(私が間違っていない場合)。

レンダラープロセスに通知するために、メインプロセスのWebContents.sendを試しましたが、メッセージが非同期であるため、レンダラープロセスが実際に操作を実行する前にアプリケーションが閉じられているようです。

答えて

2

これまでのところ、私のために働いた最も簡単な解決策は、以下を実行して構成されています:メインプロセスで

  1. BrowserWindowcloseイベントをリッスンし、そしてそれが起こるとき、それはwebContents経由でメッセージを送信レンダラープロセスに渡します。また、event.preventDefault()を呼び出すことによって、アプリケーションがすぐに閉じられないようにします。
  2. レンダラープロセスは常にlistening on IPC messagesメインプロセスからのものであることがcloseイベント通知を受信した場合、その後、それはそのデータを保存し、その後、メイン処理IPCメッセージ(例えばclosed)を送信します。
  3. メインプロセスはレンダラーのIPCメッセージ(ipcMain.on)を聞くフックを設定していたので、closedメッセージが到着すると、最後にプログラムが終了します(app.quit()など)。私はそれを正しく理解している場合、app.quit()を呼び出すとBrowserWindowに別のcloseイベントを送信

注意、それはあなたが何とかそれを防ぐない限り、ループますので。私は汚れたハックを使用しました(を終了しますを呼び出さずにcloseイベントが呼び出されたときに秒が終了します)、より良い解決策が存在する必要があります。

1

あなただけのレンダリングプロセスにおける通常のunloadまたはbeforeunloadイベント使用することができます。

window.addEventListener('unload', function(event) { 
    // store data etc. 
}) 
関連する問題