2016-12-28 52 views
0

我有一個應用程序在退出之前需要進行API調用(類似於註銷)。由於我仍然需要訪問API調用的某些應用程序數據(redux store),因此我決定在應用程序上收聽「退出前」事件。在電子(atom-shell)中使用'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); 
}); 

事件似乎永遠不會解僱或防止關機不起作用。 當我用browser-window-blur代替before-quit事件確實火和代碼似乎工作。

僅供參考我使用Electron 1.2.8(由於某些依賴關係,我無法升級)。我已經加倍檢查,before-quit事件在該版本中已經是implemented

任何想法爲什麼這個事件似乎沒有被解僱?

在預先感謝和節日快樂!

回答

0

有2個問題,從工作防止代碼:

  1. 不知何故,「之前,退出」事件不會在重新呈現過程中開火。 (不是main.js)。
  2. 一旦我將eventlistener移到主進程中,防止默認沒有停止關閉窗口。這隻能通過添加返回false的window.onbeforeunload函數來完成。就像在this thread中建議的一樣。

一個需要注意的是onbeforeunload的return語句不會被更新。在我的情況下,我首先返回false(以防止關閉窗口)。第二次它沒有返回false,但它一直阻止關閉窗口。

我通過覆蓋window.onbeforeunload用一個不返回false的新函數來解決這個問題。

相關問題