JavaScript Notification — системні сповіщення браузера
Notification показує системне сповіщення — те, що виринає в кутку екрана поза вікном браузера.
Загальний опис
Показати його можна лише з дозволу користувача, і дозвіл питається явно — Notification.requestPermission().
І тут головне правило, яке порушує половина сайтів: не питай дозволу одразу після завантаження. Людина, яка щойно зайшла й ще нічого не побачила, натисне «Заблокувати» — а це рішення назавжди, повторно запитати браузер уже не дасть.
Питати треба тоді, коли користувач сам зробив дію, з якої видно, що сповіщення йому потрібні: підписався на тему, увімкнув нагадування.
Сповіщення з закритої вкладки (справжній push) показує вже ServiceWorker — сам по собі Notification живе, доки жива сторінка.
- Нотатка
-
Відмова незворотна: після «Заблокувати» повторний
автор: NagarDrequestPermission()мовчки повернеdenied, не показавши жодного вікна. Один невдалий запит — і сповіщення для цього користувача закриті назавжди.
Синтаксис
new Notification("Заголовок", { body: "Текст" });
методи
| Метод | Опис |
|---|---|
| close | Закриває сповіщення. |
| requestPermission | Питає в користувача дозвіл на сповіщення. |
властивості
| Властивість | Опис |
|---|---|
| permission | Стан дозволу: default, granted, denied. |
| title | Заголовок сповіщення. |
| body | Текст сповіщення. |
| icon | Адреса іконки. |
Переглядачі
| Переглядач | ||||||
|---|---|---|---|---|---|---|
| Notification | 22+ | 22+ | 16.4+ | 25+ | 14+ | - |
| Переглядач | ||||
|---|---|---|---|---|
| Notification | - | yes | yes | 16.4+ |
Приклади
+ запропонувати свій приклад у пісочниці
Дозвіл питаємо на дію користувача, а не на завантаженні.
HTML
<button id="subscribe">Увімкнути нагадування</button>
JS
const button = document.getElementById('subscribe');
button.addEventListener('click', async () => {
// питаємо ТУТ — коли людина сама попросила
const permission = await Notification.requestPermission();
if (permission !== 'granted') {
console.log('Користувач відмовив — більше не питаємо');
return;
}
new Notification('Нагадування увімкнено', {
body: 'Ми повідомимо про нові матеріали',
icon: '/img/logo.svg',
tag: 'subscribe', // однакові теґи не множаться
});
});
Коментарі
Коментарів ще немає — будьте першим!