Uncaught (в обещании) DOMException при запуске pushManager.subscribe - PullRequest
0 голосов
/ 16 января 2019

Я пытаюсь добавить 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>.

Это не дает мне какой-либо значимой информации для дальнейшего изучения проблемы.

Буду признателен, если вы поможете мне решить эту проблему. Я вставлю остальную часть своего кода и настройки ниже.

  1. Внутренний каркас: Laravel.
  2. Вход в мой 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. Что может быть причиной?

1 Ответ

0 голосов
/ 18 марта 2019

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

...