Spec-Zone.ru › Electron

Уведомления

Обзор​

Все три операционные системы предоставляют средства для приложений, чтобы отправлять уведомления пользователю. Техника отображения уведомлений отличается для процессов Main и Renderer.

Для процесса Renderer Electron удобно позволяет разработчикам отправлять уведомления с помощью API уведомлений HTML5, используя родные API уведомлений текущей операционной системы для их отображения.

Для отображения уведомлений в процессе Main необходимо использовать модуль Notification.

Пример​

Отображение уведомлений в процессе Renderer​

Начиная с работающего приложения из Руководства по быстрому запуску, добавьте следующую строку в файл index.html перед закрывающим </body> тегом:

<script src="renderer.js"></script>

…и добавьте файл renderer.js:

docs/fiddles/features/notifications/renderer (20.1.0)Открыть в Fiddle
  • main.js
  • index.html
  • renderer.js
const { app, BrowserWindow } = require('electron')

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  })

  win.loadFile('index.html')
}

app.whenReady().then(createWindow)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
    <h1>Hello World!</h1>
    <p>After launching this application, you should see the system notification.</p>
    <p id="output">Click it to see the effect in this interface.</p>

    <script src="renderer.js"></script>
</body>
</html>
const NOTIFICATION_TITLE = 'Title'
const NOTIFICATION_BODY = 'Notification from the Renderer process. Click to log to console.'
const CLICK_MESSAGE = 'Notification clicked!'

new Notification(NOTIFICATION_TITLE, { body: NOTIFICATION_BODY })
  .onclick = () => document.getElementById("output").innerText = CLICK_MESSAGE

После запуска приложения Electron вы должны увидеть уведомление:

Notification in the Renderer process

Кроме того, если вы нажмёте на уведомление, DOM обновится, отобразив «Уведомление нажато!».

Отображение уведомлений в процессе Main​

Начиная с работающего приложения из Руководства по быстрому запуску, обновите файл main.js следующими строками:

docs/fiddles/features/notifications/main (20.1.0)Открыть в Fiddle
  • main.js
  • index.html
const { app, BrowserWindow, Notification } = require('electron')

function createWindow () {
  const win = new BrowserWindow({
    width: 800,
    height: 600
  })

  win.loadFile('index.html')
}

const NOTIFICATION_TITLE = 'Basic Notification'
const NOTIFICATION_BODY = 'Notification from the Main process'

function showNotification () {
  new Notification({ title: NOTIFICATION_TITLE, body: NOTIFICATION_BODY }).show()
}

app.whenReady().then(createWindow).then(showNotification)

app.on('window-all-closed', () => {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow()
  }
})
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Hello World!</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self' 'unsafe-inline';" />
</head>
<body>
    <h1>Hello World!</h1>
    <p>After launching this application, you should see the system notification.</p>
</body>
</html>

После запуска приложения Electron вы должны увидеть системное уведомление:

Notification in the Main process

Дополнительная информация​

Хотя код и пользовательский интерфейс в разных операционных системах похожи, существуют незначительные различия.

Windows​

  • В Windows 10 для доступа к вашему приложению с помощью ID модели пользователя приложения должен быть установлен ярлык в меню «Пуск». Во время разработки это может быть излишним, поэтому добавление node_modules\electron\dist\electron.exe в меню «Пуск» также сработает. Перейдите к файлу в проводнике, щелкните правой кнопкой мыши и выберите «Закрепить в меню Пуск». Затем вам необходимо добавить строку app.setAppUserModelId(process.execPath) в ваш основной процесс, чтобы увидеть уведомления.
  • В Windows 8.1 и Windows 8 для доступа к вашему приложению с помощью ID модели пользователя приложения должен быть установлен ярлык на экране «Пуск». Однако его не нужно закреплять на экране «Пуск».
  • В Windows 7 уведомления работают с помощью специальной реализации, визуально напоминающей родные уведомления в более новых системах.

Electron пытается автоматизировать обход ID модели пользователя приложения. Когда Electron используется вместе с системой установки и обновления Squirrel, ярлыки будут автоматически установлены правильно. Кроме того, Electron определит, что использовался Squirrel, и автоматически вызовет app.setAppUserModelId() с правильным значением. Во время разработки вам может потребоваться самостоятельно вызвать app.setAppUserModelId().

Кроме того, в Windows 8 максимальная длина тела уведомления составляет 250 символов, при этом команда Windows рекомендует, чтобы уведомления содержали не более 200 символов. Однако это ограничение было снято в Windows 10, и команда Windows просит разработчиков соблюдать разумность. Попытка отправки API огромного количества текста (тысячи символов) может привести к нестабильности.

Расширенные уведомления​

Более поздние версии Windows позволяют использовать расширенные уведомления с настраиваемыми шаблонами, изображениями и другими гибкими элементами. Для отправки этих уведомлений (как из основного процесса, так и из процесса рендеринга) используйте модуль пользовательского уровня electron-windows-notifications, который использует родные плагины Node для отправки ToastNotification и TileNotification объектов.

Хотя уведомления с кнопками работают с electron-windows-notifications, обработка ответов требует использования electron-windows-interactive-notifications, что помогает в регистрации необходимых компонентов COM и вызове вашего приложения Electron с введенными пользователем данными.

Режим «Не беспокоить»/Режим презентации​

Чтобы определить, разрешено ли отправлять уведомление, используйте модуль пользовательского уровня electron-notification-state.

Это позволит определить заранее, будет ли Windows молча игнорировать уведомление.

macOS​

Уведомления в macOS простые, но вы должны быть знакомы с руководством Apple по пользовательскому интерфейсу, касающимся уведомлений.

Обратите внимание, что уведомления ограничены размером 256 байт и будут усечены, если вы превысите этот предел.

Режим «Не беспокоить»/Состояние сессии​

Чтобы определить, разрешено ли отправлять уведомление, используйте модуль пользовательского уровня electron-notification-state.

Это позволит вам определить заранее, будет ли отображено уведомление.

Linux​

Уведомления отправляются с помощью libnotify, что может показывать уведомления в любой среде рабочего стола, которая соответствует Спецификации уведомлений рабочего стола, включая Cinnamon, Enlightenment, Unity, GNOME, KDE.

© GitHub Inc.
Licensed under the MIT license.
https://www.electronjs.org/docs/latest/tutorial/notifications

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API