2016-12-28 9 views
0

終了する前にAPI呼び出しを行う必要のあるアプリケーションがあります(ログアウトのようなものです)。私はAPIコールのためにまだいくつかのアプリケーションデータ(reduxストア)にアクセスする必要があるので、私はappで 'before-quit'イベントを聞くことに決めました。電子(アトムシェル)の 'before-quit'イベントの使用

私は、次のコードを試してみました:

import {remote} from 'electron'; 
let loggedout = false; 

remote.app.on('before-quit', (event) => { 
    if (loggedout) return; // if we are logged out just quit. 
    console.warn('users tries to quit'); 

    // prevent the default which should cancel the quit 
    event.preventDefault(); 

    // in the place of the setTimout will be an API call 
    setTimeout(() => { 
    // if api call was a success 
    if (true) { 
     loggedout = true; 
     remote.app.quit(); 
    } else { 
     // tell the user log-out was not successfull. retry and quit after second try. 
    } 
    }, 1000); 
}); 

イベントを発生したり、シャットダウンを防止することは動作しないようだことはありません。 before-quitbrowser-window-blurと交換すると、になり、コードが正常に機能しているように見えます。

私はElectron 1.2.8を使用しています(アップグレードできない依存関係のため)。私はダブルチェックしてbefore-quitイベントはすでにそのバージョンでimplementedだった。

このイベントが発生していないようなアイデアはありますか?

ありがとうございました!

答えて

0

作業からコードを防止2つの問題があります。

  1. どういうわけか「前-終了」イベントが再レンダリングプロセスでは発生しませんが。 (main.jsではなく)。
  2. イベントリスナーをメインプロセスに移動すると、デフォルトではウィンドウが閉じられなくなりませんでした。これは、falseを返すwindow.onbeforeunload関数を追加することによってのみ行うことができます。 this threadで提案されているように。

返信文onbeforeunloadが更新されないという警告が1つあります。私の場合、私は最初にfalseを返しました(ウィンドウが閉じないように)。 2回目はfalseに戻りませんでしたが、ウィンドウの終了を妨げていました。

私はwindow.onbeforeunloadにfalseを返さなかった新しい関数をオーバーライドして回避しました。

関連する問題