NodeJS - иконка электронного трея исчезает через минуту - PullRequest
0 голосов
/ 28 октября 2019

Честно говоря, я понятия не имею, что происходит.

Я следил за иконой, и она исчезает через несколько минут. Нет, стрелка рядом с часами не идет:

Icon missing

Это моя иконка (взрыв в красном):

enter image description here

Я не знаю, как отлаживать, если значок есть, но пустой, или если есть событие, вызывающее его скрытие, или если процесс в трее закрывается самиз-за ошибки. В консоли или в моем приложении ничего не происходит.

Может кто-нибудь помочь? Ниже мое целое index.js:

const {app, BrowserWindow, Tray, Menu} = require('electron');
const path = require('path');

var win = '',
    iconpath = path.join(__dirname, '/libs/img/icon.ico');

// Create the browser window
function createWindow () {

  // BrowserWindow size
  win = new BrowserWindow({
    width: 800,
    height: 720,
    webPreferences: {
      nodeIntegration: true
    }
  });

  // tray menu
  var contextMenu = Menu.buildFromTemplate([
    {
        label: 'Show app', click: function () {
            win.show()
        }
    },
    {
        label: 'Quit', click: function () {
            app.isQuiting = true;
            app.quit();
        }
    }
  ]);

  // Creates tray menu with tray icon
  var appIcon = new Tray(iconpath);
  // Define menu
  appIcon.setContextMenu(contextMenu);

  win.on('close', function () {
    app.isQuiting = true;
    app.quit();
  });

  // Load the index.html of the app
  win.loadFile('./view/index.html');
}

app.on('ready', createWindow);

1 Ответ

1 голос
/ 28 октября 2019

Это хорошо известная проблема, связанная со сборкой мусора, упомянутая на странице Electron :

Окно / лоток моего приложения исчезли через несколько минут.

Итак, быстрое решение - переместить объявление переменной appIcon из функции createWindow рядом с переменной win, например:

const {app, BrowserWindow, Tray, Menu} = require('electron');
const path = require('path');

var win = '',
    appIcon = null,
    iconpath = path.join(__dirname, '/libs/img/icon.ico');

// Create the browser window
function createWindow () {

  // BrowserWindow size
  win = new BrowserWindow({
    width: 800,
    height: 720,
    webPreferences: {
      nodeIntegration: true
    }
  });

  // tray menu
  var contextMenu = Menu.buildFromTemplate([
    {
        label: 'Show app', click: function () {
            win.show()
        }
    },
    {
        label: 'Quit', click: function () {
            app.isQuiting = true;
            app.quit();
        }
    }
  ]);

  // Creates tray menu with tray icon
  appIcon = new Tray(iconpath);
  // Define menu
  appIcon.setContextMenu(contextMenu);

  win.on('close', function () {
    app.isQuiting = true;
    app.quit();
  });

  // Load the index.html of the app
  win.loadFile('./view/index.html');
}

app.on('ready', createWindow);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...