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 для хранения данных в автономном режиме:
- Для URL-адресованных ресурсов используйте Cache API (часть сервисных работников).
- Для всех остальных данных используйте IndexedDB (с оберткой обещаний).
Вы можете кэшировать статические ресурсы, составляя оболочку вашего приложения (файлы JS/CSS/HTML), используя Cache API
и заполните данные автономной страницы от IndexedDB
,