gpt4 book ai didi

node.js - 创建一个窗口并在单击关闭按钮时隐藏它

转载 作者:太空宇宙 更新时间:2023-11-04 01:32:16 27 4
gpt4 key购买 nike

我一直在尝试创建一个有两个选项的托盘应用程序,第一个选项创建浏览器窗口,第二个选项关闭托盘进程。编写基本结构后,我对其进行了测试,当我关闭主浏览器窗口时,托盘应用程序退出。在互联网上挖掘后,我发现this .

这部分之后事情开始变得奇怪。如果我使用 Visual Studio 启动我的 Electron 应用程序,我可以打开/显示和隐藏应用程序 4-6 次,然后它会卡住。如果我使用 npm start 启动应用程序,我只能打开和隐藏它两次,然后它完全卡住。我想知道这是否是 ubuntu 的问题,所以我启动了一个 Windows 虚拟机并安装了 Windows 的 Electron 模块作为该项目的依赖项。如果在 Windows 上使用相同的项目,即使我使用 npm start 启动它,我也可以创建/显示和隐藏应用程序 14-16 次,之后,托盘图标就会消失。这是我的代码

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 建议我 this question但它的解决方案也没有帮助。有正确的方法吗? (I also asked a similar question here if that helps)

最佳答案

我不确定您到底遇到了哪个问题。

除了现已更正的 if (windowshown = true){(应为 ==)之外,托盘图标在一段时间后消失。

这可能是由于您在就绪处理程序中声明变量而导致的。因此,它会在一段时间后被垃圾收集删除。

如果您移动主部分中的声明(与 mainWindow 同一级别),托盘将保留在周围。

关于node.js - 创建一个窗口并在单击关闭按钮时隐藏它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55715645/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com