#javascript #firefox #push-notification #service-worker #navigator
#javascript #firefox #push-уведомление #service-worker #навигатор
Вопрос:
Недавно я добавил часть уведомлений для нашего веб-приложения, и она отлично работает в Chrome и Opera, но для firefox изначально я получил сообщение об ошибке с этим сообщением:
Разрешение на уведомление может быть запрошено только изнутри короткого обработчика событий, созданного пользователем.
Итак, я добавил кнопку для предоставления разрешения на уведомления, и теперь я обнаружил, что есть большая ошибка; событие ‘onchange’ navigator.permissions не работает для активации уведомлений после получения разрешения от пользователя. вот мой код:
self.addEventListener('activate', async () => {
if ('permissions' in navigator) { // inside of this if not executing on firefox
navigator.permissions.query({ name: 'notifications' }).then(function (permissionStatus) {
permissionStatus.onchange = function () {
// do thing in here...
};
});
}
//...
});
Хотя я знаю, что «window» является переменной по умолчанию в файлах js, я также попробовал «window.navigator» вместо «navigator», и ничего не изменилось.
Ответ №1:
Наконец, я узнал, что, поскольку мы запускаем запрос разрешения вручную и нажимаем на кнопку, механизм firefox отличается, и мы должны выполнить наше действие onchange в результате обещания запроса разрешения, как показано ниже:
Notification.requestPermission()
.then(async result => {
if (result === 'granted') {
// subscribe and do stuff in here...
}
})
.catch(err => {
console.log('Error: ', err);
});
Вы все равно можете использовать описанный метод onchange для других браузеров, таких как Chrome.