Использование API уведомлений

Эрнест Дельгадо
Эрнест Дельгадо

Введение

API уведомлений позволяет отображать уведомления пользователю об определенных событиях как пассивно (новые электронные письма, твиты или события календаря), так и о взаимодействиях с пользователем, независимо от того, на какой вкладке находится фокус. Существует проект спецификации , но в настоящее время его нет ни в одном стандарте.

Вы можете выполнить следующие простые шаги, чтобы реализовать уведомления всего за несколько минут:

Шаг 1. Проверьте поддержку API уведомлений.

Проверяем, поддерживается ли webkitNotifications . Обратите внимание, что имя webkitNotifications связано с тем, что оно является частью черновика спецификации. Вместо этого в окончательной спецификации будет функция Notifications().

// check for notifications support
// you can omit the 'window' keyword
if (window.webkitNotifications) {
console.log("Notifications are supported!");
}
else {
console.log("Notifications are not supported for this Browser/OS version yet.");
}

Шаг 2. Разрешите пользователю предоставить веб-сайту разрешение на показ уведомлений.

Любой из упомянутых нами конструкторов выдаст ошибку безопасности, если пользователь вручную не предоставил веб-сайту разрешения на показ уведомлений. Для обработки исключения вы можете использовать оператор try-catch, но с той же целью вы также можете использовать метод checkPermission .

document.querySelector('#show_button').addEventListener('click', function() {
if (window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
// function defined in step 2
window.webkitNotifications.createNotification(
    'icon.png', 'Notification Title', 'Notification content...');
} else {
window.webkitNotifications.requestPermission();
}
}, false);

Если у веб-приложения нет разрешений на показ уведомлений, метод requestPermission отобразит информационную панель:

Информационная панель разрешений на уведомления в Google Chrome
Информационная панель разрешений на уведомления в Google Chrome.

Однако очень важно помнить, что метод requestPermission работает только в обработчиках событий, запускаемых действием пользователя, например событиями мыши или клавиатуры, чтобы избежать нежелательных информационных панелей. В данном случае действием пользователя является нажатие кнопки с идентификатором «show_button». Приведенный выше фрагмент никогда не будет работать, если пользователь в какой-то момент явно не нажал кнопку или ссылку, которая запускает requestPermission .

Шаг 3. Прикрепите прослушиватели и другие действия

document.querySelector('#show_button').addEventListener('click', function() {
  if (window.webkitNotifications.checkPermission() == 0) { // 0 is PERMISSION_ALLOWED
    // function defined in step 2
    notification_test = window.webkitNotifications.createNotification(
      'icon.png', 'Notification Title', 'Notification content...');
    notification_test.ondisplay = function() { ... do something ... };
    notification_test.onclose = function() { ... do something else ... };
    notification_test.show();
  } else {
    window.webkitNotifications.requestPermission();
  }
}, false);

На этом этапе вы можете захотеть инкапсулировать все эти события и действия, создав свой собственный класс уведомлений, чтобы сохранить чистоту кода, хотя это выходит за рамки данного руководства.