Electron.js如何最小化/closures窗口到系统托盘和从托盘恢复窗口?

我希望Electron.js应用程序能够在系统托盘上运行,并且每当用户想要执行某些操作时,都可以从系统托盘中进行恢复,并将其最小化/closures回系统托盘。 我怎么做?

我已经从文档中看到了tray部分,但是对于实现我想要的却没有多大帮助。

这是我到目前为止在main.js文件

 var application = require('app'), BrowserWindow = require('browser-window'), Menu = require('menu'), Tray = require('tray'); application.on('ready', function () { var mainWindow = new BrowserWindow({ width: 650, height: 450, 'min-width': 500, 'min-height': 200, 'accept-first-mouse': true, // 'title-bar-style': 'hidden', icon:'./icon.png' }); mainWindow.loadUrl('file://' + __dirname + '/src/index.html'); mainWindow.on('closed', function () { mainWindow = null; }); mainWindow.setMenu(null); var appIcon = null; appIcon = new Tray('./icon-resized.png'); var contextMenu = Menu.buildFromTemplate([ { label: 'Restore', type: 'radio' } ]); appIcon.setToolTip('Electron.js App'); appIcon.setContextMenu(contextMenu); }); 

更新:

我发现这个菜单栏回购,但它不会按预期在Linux上工作。

实际上我很早以前就想出了这个问题,但对于遇到同样问题的人来说,这是一种可以最小化tray和从tray恢复的方法。 诀窍是赶上closeminimize事件。

 var BrowserWindow = require('browser-window'), var mainWindow = new BrowserWindow({ width: 850, height: 450, title: "TEST", icon:'./icon.png' }); mainWindow.on('minimize',function(event){ event.preventDefault() mainWindow.hide(); }); mainWindow.on('close', function (event) { if( !application.isQuiting){ event.preventDefault() mainWindow.hide(); } return false; }); 

并从Tray恢复

 var contextMenu = Menu.buildFromTemplate([ { label: 'Show App', click: function(){ mainWindow.show(); } }, { label: 'Quit', click: function(){ application.isQuiting = true; application.quit(); } } ]); 

如果您想在系统托盘上始终显示图标,直到您不退出应用程序,则我会更新代码

  var {app, BrowserWindow, Tray, Menu } = require('electron') var path = require('path') var url = require('url') var iconpath = path.join(__dirname, 'user.ico') // path of y var win function createWindow() { win = new BrowserWindow({ width: 600, height: 600, icon: iconpath }) win.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), })) var appIcon = new Tray(iconpath); var contextMenu = Menu.buildFromTemplate([ { label: 'Show App', click: function () { win.show(); } }, { label: 'Quit', click: function () { app.isQuiting = true; app.quit(); } } ]) appIcon.setContextMenu(contextMenu); win.on('close', function (event) { win = null }) win.on('minimize', function (event) { event.preventDefault() win.hide(); }) win.on('show', function () { appIcon.setHighlightMode('always') }) } app.on('ready', createWindow)