Create-react-app registerServiceWorker дает undefined в обещании getRegistration ()

Во-первых, он работает на ПК, но не на мобильном устройстве, это моя основная проблема.

Я создал PWA, используя приложение create-react-app, и я пытаюсь реализовать push-уведомления, но, похоже, я получаю значение undefined в аргументе reg моего обещания. Кто-нибудь знает, как заставить это работать? Я уже пытаюсь извлечь приложение create-response-app, но возникает та же проблема.

Я добавил этот код в registerServiceWorker.js:

export function displayNotification() {
  if (Notification.permission === 'granted') {
    console.info('this is showing at console when i click the button')
    navigator.serviceWorker.getRegistration().then(function(reg) {
      reg.showNotification('Hello world!');
    });
  }
}

Ошибка:

Unhandled Rejection (TypeError): Cannot read property 'showNotification' of undefined

В этой проблеме говорится об этой проблеме, но я уже пробовал эти решения, и ошибка та же.

https://github.com/facebook/create-react-app/issues/2253#issuecomment-312359460

Ниже приведены старые версии, которые работают только на ПК с браузером, а в PWA при нажатии кнопки отображается пустая страница.

Мой PWA: https://danilosilvadev.github.io/pwa-test/

Мой код: https://github.com/danilosilvadev/pwa-test/tree/master

Если вы поможете мне с этой старой версией, в которой используется пакет npm под названием "реагировать-веб-уведомление": "^ 0.3.1", или с кодом, который я предоставил в этом вопросе, это моя попытка сделать это вручную в любом случае, я был бы благодарен.

Какая точная версия браузера и ОС вашего мобильного устройства?

Nick McCurdy 23.04.2018 02:29

Самая последняя. Работала ли на вашем телефоне?

Danilo Silva 23.04.2018 03:06

Я наблюдаю эту проблему на своем телефоне Android с Chrome Canary. На Android похоже, что API ведет себя иначе. Попробуйте использовать self.registration вместо обещания navigator.serviceWorker.getRegistration().

Nick McCurdy 23.04.2018 06:44

Использовал и получил Unexpected use of 'self' no-restricted-globals.

Danilo Silva 23.04.2018 11:38

Это похоже на ошибку ESLint, поскольку он не знает, что это файл веб-воркера. Не обращайте внимания на ошибку и попробуйте ее на своем мобильном устройстве.

Nick McCurdy 23.04.2018 12:38
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
999
1

Ответы 1

Я протестировал его на своем компьютере: Chrome + Windows, и он работает.

На ПК он работает, а на мобильном телефоне Android - нет. Попробуйте протестировать на своем мобильном устройстве, и вы увидите ошибку.

Danilo Silva 23.04.2018 02:09

Другие вопросы по теме