Spec-Zone.ru › Deno 2

Уведомления

Доступно в Deno 2.9

deno desktop доступен начиная с Deno v2.9.0. Если у вас более ранняя версия, обновите Deno, чтобы использовать его.

deno desktop реализует стандартный API веб-уведомлений. Тот же конструктор Notification, который вы использовали бы в браузере, отображает системное уведомление ОС (уведомления macOS, всплывающие уведомления Windows или службу уведомлений рабочего стола Linux) из кода на стороне Deno.

const n = new Notification("Build complete", {
  body: "Your binary is ready.",
});

n.addEventListener("click", () => win.focus()); // bring the app to front

Notification определён только в приложениях, скомпилированных с помощью deno desktop. В обычном скрипте deno run он отсутствует.

Разрешения

Для уведомлений требуется разрешение на уровне ОС, как и в вебе. Проверьте текущее состояние с помощью Notification.permission и запросите разрешение с помощью Notification.requestPermission():

if (Notification.permission !== "granted") {
  const permission = await Notification.requestPermission();
  if (permission !== "granted") {
    // The user declined, don't try to notify.
    return;
  }
}

new Notification("All set", { body: "Notifications are enabled." });

Notification.permission — это синхронный кэшированный геттер, содержащий результат последнего запроса или проверки. requestPermission() при первом вызове, если пользователь ещё не принял решение, вызывает системный запрос и возвращает "granted", "denied" или "default".

Чтобы получить актуальное состояние ОС, включая информацию о том, есть ли у платформы модель разрешений, используйте API Permissions:

const status = await navigator.permissions.query({ name: "notifications" });
console.log(status.state); // "granted" | "denied" | "prompt"

На платформе или в серверной части, где отсутствует понятие разрешений (отдельный процесс macOS, некоторые службы уведомлений Linux), запрос возвращает "prompt", и уведомления отображаются без явного разрешения.

Для macOS требуется подписанный кодом пакет

macOS предоставляет разрешение на уведомления только приложению со стабильной идентичностью кода. deno desktop выполняет временную подпись каждого создаваемого пакета (и повторно подписывает кэшированную среду выполнения в режиме --hmr), поэтому всё работает сразу. Инструкции по настройке настоящей идентичности подписи см. в разделе Распространение.

Параметры

Конструктор принимает стандартные NotificationOptions:

new Notification("New message", {
  body: "Alice: are we still on for 3pm?",
  icon: "data:image/png;base64,iVBORw0KGgo…",
  tag: "chat-alice",
  requireInteraction: true,
  silent: false,
});
Параметр Тип Примечания
body string Текст уведомления.
icon string URL значка. Отображаются только URL data: (см. ниже).
tag string Заменяет существующее уведомление с тем же тегом, а не добавляет новое.
requireInteraction boolean Оставляет уведомление видимым, пока пользователь его не закроет.
silent boolean | null Отключает звук уведомления.
badge string URL значка (зависит от платформы).
dir "auto" | "ltr" | "rtl" Направление текста.
lang string Тег языка BCP 47.
data any Произвольные данные, прикреплённые к уведомлению; получить их можно через data.

Значки

В спецификации Web Notifications тип icon — строка URL. Среда выполнения на настольном компьютере может синхронно обрабатывать только URL data:, поэтому отображается встроенный значок data:image/png;base64,…. Другие схемы URL (https:, file:) принимаются и сохраняются в свойстве icon, но системное уведомление отображается без значка. Чтобы использовать файл на диске, прочитайте его и закодируйте как URL data::

import { encodeBase64 } from "jsr:@std/encoding/base64";

const bytes = await Deno.readFile("./icons/alert.png");
const dataUrl = "data:image/png;base64," + encodeBase64(bytes);
new Notification("Heads up", { icon: dataUrl });

События

Notification — это EventTarget. Подписывайтесь на события с помощью addEventListener или свойств on<event>:

const n = new Notification("Download finished");

n.onshow = () => console.log("shown");
n.onclick = () => openDownloadsFolder();
n.onclose = () => console.log("dismissed");
n.onerror = () => console.warn("the OS rejected the notification");
Событие Когда возникает
show ОС отобразила уведомление.
click Пользователь нажал на текст уведомления.
close Пользователь закрыл уведомление или истёк срок его действия.
error ОС не смогла отобразить уведомление (например, из-за отказа в разрешении).

Закрытие

Вызовите close(), чтобы программно закрыть уведомление:

const n = new Notification("Connecting…");
// later, once connected:
n.close();

В остальных случаях уведомления отправляются без ожидания результата. После отображения ими управляет ОС, а close() — это лишь запрос, который может не сработать.

Последнее обновление: 25 июня 2026 г.

© 2018–2025 the Deno authors
Licensed under the MIT License.
https://docs.deno.com/runtime/desktop/notifications

Spec-Zone.ru

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