Я пытался создать приложение в трее, в котором есть две опции: первая создает окно браузера, а вторая закрывает процесс в трее.После написания базовой структуры, которую я протестировал, приложение в трее закрылось, когда я закрыл главное окно браузера.Покопавшись в интернете, я обнаружил this .
После этой части все становится странным.Если я запускаю свое электронное приложение в Visual Studio, я могу открывать / показывать и скрывать приложение 4-6 раз, после чего оно зависает.Если я запускаю приложение с npm start
, я могу открыть и скрыть его только два раза, после чего оно полностью зависает.Я задавался вопросом, была ли это проблема с Ubuntu, поэтому я загрузил виртуальную машину Windows и установил электронный модуль для Windows в качестве зависимости от этого проекта.Если использовать тот же проект для Windows, я могу создавать / показывать и скрывать приложение 14-16 раз, даже если я запускаю его с npm start
, после этого значок на панели задач просто исчезает.Вот мой код
const {app, BrowserWindow, Menu, Tray, ipcMain} = require('electron');
let mainWindow;
let windowshown = false;
let eventcount = 0;
app.on('ready', createWindow)
function createWindow () {
let tray = null
tray = new Tray('path/to/image.jpg')
const contextMenu = Menu.buildFromTemplate([
{ label: 'Open blank window', click:() => {
console.log("called createwin");
createwin();
}
},
{label: 'Try to quit', click: (item, window, event) => {
if (windowshown == true){
mainWindow.removeAllListeners('close');
mainWindow = null
}
app.quit();
}},
])
tray.setContextMenu(contextMenu)
}
function createwin(){
if (windowshown == false) {
mainWindow = new BrowserWindow({
width: 1000,
height: 800,
webPreferences: {
nodeIntegration: true
}
})
mainWindow.on('close', (event) => {
event.preventDefault();
console.log("Window has been hidden");
mainWindow.hide();
//return 0;
});
console.log("Window has been created")
windowshown = true;
mainWindow.loadFile('nothing.html');
}
else {
mainWindow.show();
eventcount++;
console.log("Window has been shown " + eventcount + " time(s)");
}
}
Вот вывод на ubuntu
called createwin
Window has been shown 1 time(s)
Window has been hidden
.
.
.
called createwin
Window has been shown 10 time(s)
Window has been hidden
(tray app becomes unresponsive so I stop the debugger)
Window has been hidden
Windows дает аналогичный результат, но я могу открывать / закрывать приложение более 16 раз.При написании этого, stackoverflow предложил мне этот вопрос , но его решение тоже не помогло.Есть ли правильный способ сделать это? (я также задавал подобный вопрос здесь, если это поможет)