【问题标题】:How to force the closing of an Electron app?如何强制关闭电子应用程序?
【发布时间】:2019-07-10 17:51:20
【问题描述】:

我有一个电子应用程序,它会加载应用程序网络版本的 URL。 但是,我无法通过单击 X 按钮关闭应用程序,并且我无权访问 webapp。 我试过这个:

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 中单击删除,我可以关闭该应用程序。

此外,这个let names= window.eventNames();返回一个没有任何beforeunload事件的数组

【问题讨论】:

  • 等等,你是在电子(主)代码中使用窗口全局(渲染器)吗?
  • 你能把repo链接发一下吗?
  • 我正在创建一个 BrowserWindow,然后在该窗口中加载一个 url。我不能发布链接:(
  • 我不是 JavaScript 英雄,但我认为使用 window 作为变量名是一个“坏主意”。

标签: javascript electron exit close-application


【解决方案1】:

在您创建 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();
});

【讨论】:

    【解决方案2】:

    您需要保存 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()
    })
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-07
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多