2017-01-06 172 views
0

我有一個渲染器進程,我們稱之爲RP。 單擊按鈕時,它會打開瀏覽器窗口(BW)。無法阻止電子窗口關閉

現在當關閉點擊BW時,我想在RP中捕捉這個關閉事件並阻止它。

在RP中調用close事件之前,我正在經歷窗口關閉的情況。

代碼:

bw.on("close", (e: Electron.Event) => hideWindow(e)); 
let hideWindow = (e: Electron.Event) => { 
    e.preventDefault(); 
    bw.hide(); 
    return false; 
    } 

我在做什麼錯?

我知道,在bw中我可以使用beforeunload,它的工作原理。但是我想讓RP控制窗口是否關閉。

回答

0

這是不可能的,因爲打開瀏覽器窗口的進程是渲染器進程,它通過electron.remote調用,因此被處理爲異步。正因爲如此,窗口在關閉事件處理之前關閉。 如果打開瀏覽器窗口的過程是主要過程,那就沒問題。

這說明情況:https://github.com/CThuleHansen/windowHide 這裏是問題的一個較長的討論:https://discuss.atom.io/t/close-event-for-window-being-fired-after-window-has-been-closed/37863/4

2

這裏是你如何防止關閉:

大量的試驗後,我想出了一個解決方案:

// Prevent Closing when work is running 
window.onbeforeunload = (e) => { 
    e.returnValue = false; // this will *prevent* the closing no matter what value is passed 

    if(confirm('Do you really want to close the application?')) { 
    win.destroy(); // this will bypass onbeforeunload and close the app 
    } 
}; 

在文檔實測值:event-closedestroy

+0

需要在渲染器中應用。 IE瀏覽器。在html(index.html)中。 – ryanjones