关闭Electron应用程序时关闭所有窗口

8

我正在学习在Electron中编写JavaScript。我有两个窗口,一个主窗口和一个子窗口。当在Windows计算机上选择X关闭主窗口时,我希望它能关闭整个应用程序,包括子窗口。下面这行代码适用于Mac PC。

mainWindow.on('closed', () => app.quit());

什么是在Windows PC上执行相同操作的正确方法?

那么你的意思是在Windows上无法运行?发生了什么情况?有任何错误或其他反馈吗? - jonrsharpe
当您点击主窗口上的X时,子窗口会保留。 - David Brierton
只有当我在文件菜单中实际选择退出时,它才会真正关闭两个。 - David Brierton
2个回答

13

app.quit() 是正确的函数来实现此操作。

引自文档(https://github.com/electron/electron/blob/master/docs/api/app.md)

尝试关闭所有窗口。首先将触发 before-quit 事件。如果成功关闭了所有窗口,则将触发 will-quit 事件,应用程序默认会终止。

这种方法可确保所有 beforeunload 和 unload 事件处理程序都能正确执行。有可能窗口在 beforeunload 事件处理程序中返回 false 来取消退出。

如果您在按钮单击时直接关闭应用程序而不是关闭窗口->监听事件->退出应用程序,则可以在 Windows 中更正此行为。

const app = require('electron').remote.app;
const close = document.getElementById('myCloseButton');
close.on('click',function(){
  app.quit();
});
注意: app.exit() 也是存在的,但它不会发送上述提到的事件,因此只有在必要时才应使用它。

有可能窗口通过在beforeunload事件处理程序中返回false来取消退出。如何覆盖所有窗口的beforeUnload事件,使它们无法取消? - kkica

2

我在 main.js 中这样处理:

// create two windows
let mainWindow = new BrowserWindow();
let backgroundWindow = new BrowserWindow();

将一个函数暴露给渲染进程(在此例中为“mainWindow”),以关闭应用程序:
 exports.closeAppWindow = function(){
    backgroundWindow.close();
    mainWindow.close();
}

正如上面引用的文档所述:
如果所有窗口都成功关闭,则将发出“will-quit”事件,并且默认情况下应用程序将终止。
由于两个窗口都已关闭,因此应用程序随后关闭。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接