2019-12-04 06:38:53 +00:00
|
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
|
|
<head>
|
|
|
|
<meta charset="UTF-8" />
|
|
|
|
<title>Tray</title>
|
|
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div>
|
|
|
|
<h1>Tray</h1>
|
|
|
|
<h3>
|
|
|
|
The <code>tray</code> module allows you to create an icon in the
|
|
|
|
operating system's notification area.
|
|
|
|
</h3>
|
|
|
|
<p>This icon can also have a context menu attached.</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
Open the
|
2020-02-17 00:46:41 +00:00
|
|
|
<a href="https://electronjs.org/docs/api/tray">
|
2019-12-04 06:38:53 +00:00
|
|
|
full API documentation (opens in new window)
|
|
|
|
</a>
|
|
|
|
in your browser.
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<div>
|
|
|
|
<button id="put-in-tray">View Demo</button>
|
|
|
|
<span id="tray-countdown"></span>
|
|
|
|
</div>
|
|
|
|
<p>
|
|
|
|
The demo button sends a message to the main process using the
|
|
|
|
<code>ipc</code> module. In the main process the app is told to
|
|
|
|
place an icon, with a context menu, in the tray.
|
|
|
|
</p>
|
|
|
|
|
|
|
|
<p>
|
|
|
|
In this example the tray icon can be removed by clicking 'Remove' in
|
|
|
|
the context menu or selecting the demo button again.
|
|
|
|
</p>
|
|
|
|
<h5>Main Process</h5>
|
|
|
|
<pre>
|
|
|
|
<code>
|
|
|
|
const path = require('path')
|
|
|
|
const {ipcMain, app, Menu, Tray} = require('electron')
|
|
|
|
|
|
|
|
let appIcon = null
|
|
|
|
|
|
|
|
ipcMain.on('put-in-tray', (event) => {
|
|
|
|
const iconName = process.platform === 'win32' ? 'windows-icon.png' : 'iconTemplate.png'
|
|
|
|
const iconPath = path.join(__dirname, iconName)
|
|
|
|
appIcon = new Tray(iconPath)
|
|
|
|
|
|
|
|
const contextMenu = Menu.buildFromTemplate([{
|
|
|
|
label: 'Remove',
|
|
|
|
click: () => {
|
|
|
|
event.sender.send('tray-removed')
|
|
|
|
}
|
|
|
|
}])
|
|
|
|
|
|
|
|
appIcon.setToolTip('Electron Demo in the tray.')
|
|
|
|
appIcon.setContextMenu(contextMenu)
|
|
|
|
})
|
|
|
|
|
|
|
|
ipcMain.on('remove-tray', () => {
|
|
|
|
appIcon.destroy()
|
|
|
|
})
|
|
|
|
|
|
|
|
app.on('window-all-closed', () => {
|
|
|
|
if (appIcon) appIcon.destroy()
|
|
|
|
})
|
|
|
|
</code>
|
|
|
|
</pre>
|
|
|
|
<h5>Renderer Process</h5>
|
|
|
|
<pre>
|
|
|
|
<code>
|
|
|
|
const ipc = require('electron').ipcRenderer
|
|
|
|
|
|
|
|
const trayBtn = document.getElementById('put-in-tray')
|
|
|
|
let trayOn = false
|
|
|
|
|
|
|
|
trayBtn.addEventListener('click', function (event) {
|
|
|
|
if (trayOn) {
|
|
|
|
trayOn = false
|
|
|
|
document.getElementById('tray-countdown').innerHTML = ''
|
|
|
|
ipc.send('remove-tray')
|
|
|
|
} else {
|
|
|
|
trayOn = true
|
|
|
|
const message = 'Click demo again to remove.'
|
|
|
|
document.getElementById('tray-countdown').innerHTML = message
|
|
|
|
ipc.send('put-in-tray')
|
|
|
|
}
|
|
|
|
})
|
|
|
|
// Tray removed from context menu on icon
|
|
|
|
ipc.on('tray-removed', function () {
|
|
|
|
ipc.send('remove-tray')
|
|
|
|
trayOn = false
|
|
|
|
document.getElementById('tray-countdown').innerHTML = ''
|
|
|
|
})
|
|
|
|
</code>
|
|
|
|
</pre>
|
|
|
|
|
|
|
|
<div>
|
|
|
|
<h2>ProTip</h2>
|
|
|
|
<strong>Tray support in Linux.</strong>
|
|
|
|
<p>
|
|
|
|
On Linux distributions that only have app indicator support, users
|
|
|
|
will need to install <code>libappindicator1</code> to make the
|
|
|
|
tray icon work. See the
|
2020-02-17 00:46:41 +00:00
|
|
|
<a href="https://electronjs.org/docs/api/tray">
|
2019-12-04 06:38:53 +00:00
|
|
|
full API documentation (opens in new window)
|
|
|
|
</a>
|
|
|
|
for more details about using Tray on Linux.
|
|
|
|
</p>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
</div>
|
|
|
|
|
|
|
|
<script>
|
|
|
|
// You can also require other files to run in this process
|
|
|
|
require("./renderer.js");
|
|
|
|
</script>
|
|
|
|
</body>
|
|
|
|
</html>
|