Проверьте, вернулся ли пользователь онлайн с Service Worker - PullRequest
2 голосов
/ 25 октября 2019

Есть ли способ определить, подключился ли пользователь обратно к сети / онлайн с помощью работника службы?

Я хотел бы получить некоторые данные, когда пользователь возвращается в сеть.

Возможно, это можно сделать в обработчике событий fetch, но я бы предпочел менее хакерское решение.

Псевдокод хакерского решения, которое я придумал:

self.addEventListener('fetch', function(event) {
     event.respondWith(
         fetch(event.request)
              .then(function(res) {
                   // check previous status
                   // if previous status == offline, user is back online
                   // do back online stuff...
                   // set status to online if previous status is offline
              })
              .catch(function(err) {
                   // set status to offline
              })
        );
});

1 Ответ

2 голосов
/ 27 октября 2019

Вы не можете обнаружить момент (событие) возврата в рабочее состояние из автономного состояния в самом Service Worker. Однако, если вас это особенно интересует, вы можете использовать события online и offline в объекте window. Другими словами, вы можете добавить прослушиватели событий в свой обычный JavaScript-код, выполняющийся на странице (НЕ на SW) для этих событий, и всякий раз, когда они происходят, уведомлять SW через postMessage API. Таким образом, ваш JS на странице обнаруживает изменения онлайн / офлайн и уведомляет SW, после чего SW может использовать эту информацию для любых целей.

Одно замечание: эти события online / offline нене запускается, если браузер закрыт или пользователь не просматривает страницу, потому что это происходит в контексте выполнения JS страницы. Это сделано специально: вы не сможете создать Service Worker, который бы непрерывно отслеживал состояние подключения пользователя.

Как указывали другие, в зависимости от того, что вас действительно интересует («когда происходит подключениепроизойдет изменение «против», как проверить, подключен ли он / не подключен к SW »), это может быть повторяющийся вопрос, и я предлагаю вам прочитать связанный ответ.

Из того, что вы спрашиваете, я полагаю, вы хотели бы выполнить какую-то синхронизацию между клиентом и сервером, не так ли? Если это так, я предлагаю вам прочитать о Background Sync API, который поддерживается, по крайней мере, Chrome, он может вам помочь. Вот несколько примеров использования с библиотекой Workbox https://developers.google.com/web/tools/workbox/modules/workbox-background-sync

...