Я пытаюсь добавить push-сообщения в свой сервисный работник и столкнулся с проблемой, которая ускользает от меня с прошлой ночи.
В моем основном файле HTML у меня есть следующее:
<script>
if('serviceWorker' in navigator) {
window.addEventListener('load', () => {
navigator.serviceWorker.register('/service-worker.js', {scope: '/pwa/'}).then(registration => {
console.log('Service Worker Registered: ', registration);
registration.pushManager.subscribe({userVisibleOnly:true});
});
})
}
</script>
Я получаю сообщение «Service Worker Registered» на консоли. Это означает, что регистрация прошла успешно. Однако Chrome следует за ним со следующей строкой, которая ничего не говорит об ошибке:
Uncaught (in promise) DOMException (index):1
Нажав на (index):1
, я перехожу к началу соответствующей страницы /pwa/
и выделяю <!DOCTYPE html>
.
Это не дает мне никакой значимой информации для дальнейшего изучения вопроса.
Был бы признателен, если бы вы могли помочь мне в решении этой проблемы. Я вставлю остальную часть своего кода и настрою ниже.
- Бэкэнд-фреймворк: Laravel.
- Запись в моем webpack.mix.js
const workboxPlugin = require('workbox-webpack-plugin');
mix.webpackConfig({
plugins: [
new workboxPlugin.InjectManifest({
swSrc: 'public/service-worker-offline.js', // more control over the caching
swDest: 'service-worker.js', // the service-worker file name
importsDirectory: 'service-worker-assets' // have a dedicated folder for sw files
})
],
output: {
publicPath: '' // Refer: https://github.com/GoogleChrome/workbox/issues/1534
}
});
Запись в моем service-worker-offline.js
-
workbox.skipWaiting();
workbox.clientsClaim();
// some other entries, followed by
self.addEventListener('push', (event) => {
const title = 'Aha! Push Notifications with Service Worker';
const options = {
'body' : event.data.text()
};
event.waitUntil(self.registration.showNotification(title, options))
});
Жду ваших ответов и заранее благодарю за помощь.
Приложение:
Я провел дальнейшее расследование и выяснил, что если я это сделаю...
Notification.requestPermission().then(function(permission) {
registration.pushManager.subscribe({userVisibleOnly: true});
})
тогда срабатывает push-уведомление; но ошибка все равно остается. Однако теперь ошибка указывает на строку registration.pushManager.subscribe({userVisibleOnly: true});
в JS. Что может быть причиной?