127 lines
		
	
	
	
		
			3.5 KiB
			
		
	
	
	
		
			HTML
		
	
	
	
	
	
		
		
			
		
	
	
			127 lines
		
	
	
	
		
			3.5 KiB
			
		
	
	
	
		
			HTML
		
	
	
	
	
	
| 
								 | 
							
								<!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
							 | 
						||
| 
								 | 
							
								        <a href="http://electron.atom.io/docs/api/tray">
							 | 
						||
| 
								 | 
							
								          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
							 | 
						||
| 
								 | 
							
								              <a href="http://electron.atom.io/docs/api/tray">
							 | 
						||
| 
								 | 
							
								                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>
							 |