如何强制关闭Electron应用程序?

时间:2019-07-10 17:51:20

标签: javascript electron exit close-application

我有一个电子应用程序,可以加载该应用程序的网络版本的URL。 但是,我无法通过单击X按钮来关闭该应用程序,并且无法访问该Web应用程序。 我已经尝试过了:

let count = BrowserWindow.getAllWindows().length; 
///returns 1, so there is only 1 window)

window.onbeforeunload=function(e){
    e.returnValue=undefined;
    return undefined;
}
window.close();
app.quit();

什么都没发生。

app.exit(0)可以工作,但是我不想使用它。有没有办法我可以使用window.closeapp.quit关闭应用程序?

编辑: 问题是这些全局的beforeunload事件。如果我在devtools中单击“删除”,则可以关闭该应用程序。 enter image description here

let names= window.eventNames();还返回一个没有任何 beforeunload 事件

的数组

2 个答案:

答案 0 :(得分:0)

在创建BrowserWindow的文件中,可以将事件附加到窗口的“关闭”处理程序。对于Electron,通常是main.js。

const {app, BrowserWindow} = require('electron');
let mainWindow = null;
app.on('ready', () => {
    mainWindow = new BrowserWindow({
       //options here
    });
    mainWindow.loadURL([url here]);

    //attach event handler here
    mainWindow.on("close", () => {
       mainWindow = null;
       app.quit();
    });
});

作为一种很好的措施,如果您可能有多个窗口,请将其放置在main.js文件中。

app.on('window-all-closed', () => {
     if(process.platform !== "darwin")
         app.quit();
});

答案 1 :(得分:0)

您需要保存 BrowserWindow 对象引用。然后侦听“关闭”事件并取消引用:

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

let win; // = new BrowserWindow();

win.on('closed', () => {
  win = null
})

解除引用后,一切都很简单,只需在 app 上监听“ window-all-closed”事件:

app.on('window-all-closed', () => {
  app.quit()
})