【问题标题】:Closing all app windows when using Electron使用 Electron 时关闭所有应用程序窗口
【发布时间】:2018-10-02 21:55:38
【问题描述】:

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

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

为 windows pcs 做同样事情的正确方法是什么。

【问题讨论】:

  • 所以你是说这在 Windows 上不起作用?相反会发生什么?有任何错误或其他反馈吗?
  • 当您在主窗口中点击 X 时,子窗口会保留
  • 只有当我在我的文件菜单中实际选择退出时,它才会真正关闭两者。

标签: javascript electron


【解决方案1】:

app.quit() 是执行此操作的正确函数。

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

尝试关闭所有窗口。 before-quit 事件将首先发出。如果所有窗口都成功关闭,将发出will-quit 事件,默认情况下应用程序将终止。

此方法保证所有beforeunload 和卸载事件处理程序 被正确执行。一个窗口可能会取消 通过在 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 事件,使它们无法取消?
【解决方案2】:

我在 main.js 中这样处理它:

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

向渲染器公开一个函数(在本例中为“mainWindow”)以关闭应用程序:

 exports.closeAppWindow = function(){
    backgroundWindow.close();
    mainWindow.close();
}

正如上面引用的文档所述:

如果所有窗口都成功关闭,将发出 will-quit 事件,默认情况下应用程序将终止。

应用程序随即关闭,因为两个窗口都已关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-19
    • 2019-08-12
    • 1970-01-01
    • 2011-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多