创建一个窗口并在单击关闭按钮时将其隐藏

时间:2019-04-16 19:49:45

标签: node.js electron

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

在这部分之后,事情开始变得怪异。如果从Visual Studio启动我的电子应用程序,则可以打开/显示和隐藏该应用程序4-6次,然后冻结。如果我使用npm start启动应用程序,则只能将其打开和隐藏两次,然后完全冻结。 我想知道ubuntu是否有问题,所以我启动了Windows VM,并安装了Windows电子模块作为对该项目的依赖。 如果在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)

1 个答案:

答案 0 :(得分:0)

我不确定您到底遇到了什么问题。

除了现在更正为{4}的{​​{1}}之外,托盘图标在一段时间后消失。

这很可能是由于您在ready处理程序中声明了变量所致。因此,一段时间后,将通过垃圾回收将其删除。

如果将声明移至主要部分(与if (windowshown = true){相同的位置),则托盘会粘住。