JavaScript

Ошибка при выполнении JS команды Notification

При запуске через консоль браузера этой команды:
 var notification = new Notification('Super-text',  

{ body: 'Super-Mega-Ultra-text!', dir: 'auto' }

);
Выскакивает ошибка:
 VM733:1 Uncaught TypeError: Failed to construct 'Notification': Illegal constructor. Use ServiceWorkerRegistration.showNotification() instead. 
at :1:20

Почему она выскакивает, и как убрать её?
Ошибка "Failed to construct 'Notification': Illegal constructor" возникает, потому что создание объекта `Notification` напрямую запрещено в некоторых браузерах. Вместо использования конструктора `Notification`, вам следует использовать `ServiceWorkerRegistration.showNotification()`.

Для исправления ошибки, попробуйте следующий код:

1. Запросите разрешение на отправку уведомлений:

Notification.requestPermission().then(function(permission) {
if (permission === 'granted') {
showNotification();
}
});

2. Создайте функцию `showNotification()` для отправки уведомлений с использованием `ServiceWorkerRegistration.showNotification()`:

function showNotification() {
navigator.serviceWorker.getRegistration().then(function(reg) {
var options = {
body: 'Super-Mega-Ultra-text!',
dir: 'auto'
};
reg.showNotification('Super-text', options);
});
}

Теперь, когда разрешение на отправку уведомлений будет предоставлено, функция `showNotification()` будет вызвана, и уведомление будет показано без ошибок.
Anton Ischkoff
Anton Ischkoff
25 855
Лучший ответ
Андрей Семашко Благодарю! Помогло!
Эта ошибка возникает потому, что конструктор `Notification` не может быть использован в некоторых браузерах, таких как Chrome на Android⁴. Вместо этого, вы должны использовать `ServiceWorkerRegistration.showNotification()`⁴.
Ошибка, которую вы получаете, связана с тем, что конструктор Notification больше не может быть использован напрямую из консоли браузера из-за изменений в стандартах безопасности и приватности.
Вместо этого, как указано в ошибке, вам следует использовать метод showNotification() из объекта ServiceWorkerRegistration, который относится к сервисным работникам (Service Workers) веб-приложений.
Если вы хотите использовать уведомления в браузере, рекомендуется создать и зарегистрировать сервисный работник для вашего веб-приложения и использовать его для отображения уведомлений. Для этого требуется использование JavaScript в контексте сервисного работника.
Вот пример использования showNotification() внутри сервисного работника:
self.registration.showNotification('Super-text', {
body: 'Super-Mega-Ultra-text!',
dir: 'auto'
});
Если вы не планируете использовать сервисные работники или хотите создать простое уведомление в консоли браузера для тестирования или отладки, вы можете воспользоваться функцией console.log() для вывода сообщений в консоль вместо использования Notification. Например:
console.log('Super-text: Super-Mega-Ultra-text!');
Обратите внимание, что использование Notification в рамках сервисных работников или веб-приложений с требованиями безопасности может подвергаться ограничениям и требовать соответствующих разрешений или настроек.