2016-06-15 42 views
21

Desidero che l'applicazione Electron.js viva sulla barra delle applicazioni e ogni volta che l'utente desidera eseguire un'operazione, è possibile ripristinarlo dalla barra delle applicazioni, fare qualcosa e ridurlo a icona/chiuderlo alla barra delle applicazioni. Come lo faccio?Electron.js Come minimizzare/chiudere la finestra sulla barra delle applicazioni e ripristinare la finestra dal vassoio?

Ho visto la sezione tray dalla documentazione ma non aiuta molto a ottenere ciò che voglio.

Ecco quello che ho ottenuto finora sul file 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); 
}); 

UPDATE:

ho trovato questo menubar pronti contro termine, ma non funzionerà come previsto su linux.

risposta

34

In realtà l'ho capito molto tempo fa, ma per le persone che incontrano lo stesso problema qui è un modo in cui è possibile ottenere la riduzione al tray e il ripristino da tray. Il trucco è catturare gli eventi close e minimize.

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; 
}); 

e il ripristino da Tray

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

Funziona su tutte le piattaforme? – Pier

+2

@Pier l'ho provato su linux e windows, e funziona. – Miqe

+0

Che cosa significa "applicazione" significa qui? – Vaidya

3

ho aggiornato il codice con uno scenario se si desidera visualizzare l'icona sulla barra delle applicazioni per tutto il tempo fino a quando non si esce dall'applicazione

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) 
0

Prova a ridurre l'evento anziché nasconderlo.

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.minimize(); 
}); 

mainWindow.on('close', function (event) { 

    event.preventDefault(); 
    mainWindow.minimize(); 
    return false; 
}); 

Questo ha funzionato per me. hide() stava chiudendo la finestra.