126 lines
		
	
	
	
		
			3.5 KiB
			
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			126 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="https://electronjs.org/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="https://electronjs.org/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>
 |