Service Worker: обрабатывать запросы в автономном режиме, отправлять их в режиме онлайн

У меня есть веб-приложение для чата, и я хочу, чтобы оно работало в автономном режиме. Для этого я использую прогрессивные функции веб-приложений (Service Workers), чтобы использовать кеш для загрузки приложения оболочки и уже загруженных сообщений.

То, что я хочу сделать, - это иметь возможность отправлять сообщения, когда я не в сети, и позволять работнику службы поддержки решать проблемы с подключением (т. Е. Хранить сообщение где-то до тех пор, пока не в сети, и как только мы в сети, отправить сообщение "Отправить").

Я хочу использовать Service Worker, потому что я также хочу отправить сообщение, если пользователь покинул веб-приложение после публикации сообщения без соединения.

Какой API лучше всего использовать для этого?

Я видел API фоновой синхронизации, но он не является стандартным и, кажется, не обновляется в течение почти 2 лет.


Если есть способ сделать это таким образом, чтобы клиент (веб-приложение) полностью не знал об этом механизме, это было бы здорово.

Я имею в виду, что я хотел бы, чтобы мое приложение просто fetch("/message", {method : "post", body : {content : "hey there"})И затем работник сервиса просто перехватывает выборку, если мы в сети, то он просто отправляет выборку, но если мы в автономном режиме, он "ждет", чтобы соединение снова установилось, и затем отправляет сообщение.


Интересно, есть ли прослушиватель событий, доступный в сервисном работнике, который будет активирован при переходе соединения из автономного режима в онлайн. Таким образом, я должен иметь возможность хранить запрос в indexDB в автономном режиме, а затем отправлять сообщение в режиме онлайн. Я видел navigator.onLine но это не событие:(

1 ответ

Исходя из этого поста, вы можете использовать Service Worker для запуска приложения в фоновом режиме либо через его push обработчик события (запускается через входящее push-сообщение) или через его sync обработчик событий (запускается автоматическим воспроизведением задачи, которая ранее не выполнялась).

Вы можете проверить документацию Offline Storage for Progressive Web Apps для хранения данных в автономном режиме:

Вы можете кэшировать статические ресурсы, составляя оболочку вашего приложения (файлы JS/CSS/HTML), используя Cache API и заполните данные автономной страницы от IndexedDB,

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