我有一个电子应用程序,可以加载该应用程序的网络版本的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.close
和app.quit
关闭应用程序?
编辑: 问题是这些全局的beforeunload事件。如果我在devtools中单击“删除”,则可以关闭该应用程序。
此let names= window.eventNames();
还返回一个没有任何 beforeunload 事件
答案 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()
})