Как обнаружить неактивное соединение inte rnet в ServiceWorker. PWA - PullRequest
0 голосов
/ 10 апреля 2020

Как обнаружить, что у нас нет активного inte rnet соединения в сервисном работнике? Я интересуюсь кросс-браузерным и «правильным» способом.

Решение для целого приложения тоже подойдет, и я буду признателен за это.

Пока что я пробовал несколько способов:

1) Пытался перехватывать неудачные запросы через выборку 'перехватчик'. В основном это не работает, потому что он отслеживает все неудавшиеся запросы (например, 400, 401, 403 и т. Д. c). Поэтому мы не можем доверять этому.

self.addEventListener("fetch", function(event) {
   event.respondWith(
       fetch(event.request)
        .catch(function(e) {
            // a Request failed. Maybe it's offline
       })     
   ); 
}); 

2) Я пытался используйте сообщение об ошибке fetch 'interceptor' и посмотрите, есть ли ошибка TypeError: не удалось получить. Но я не уверен, что это правильный путь из-за сравнения строкового значения. Я не уверен, что это кросс-браузерное решение, и оно выглядит немного не так: agile.

self.addEventListener("fetch", function(event) {
   event.respondWith(
       fetch(event.request)
        .catch(function(e) {
            // perhaps it's because of inactive internet connection
            if (e === 'TypeError: Failed to fetch') 
       })     
   ); 
}); 

3) Я пытался использовать NavigatorOnLine.onLine , но вообще не работает, потому что Chrome и Safari возвращают true , когда браузер может подключиться к маршрутизатору или локальной сети, даже если у них нет активного соединения Inte rnet.

4) Мой нынешний обходной путь - очень грязный хак. Я просто отправляю запрос в какой-то API с открытым исходным кодом. и проверьте его статус ответа! == 200. Это также метод fr agile.

Я просто застрял с ним.

Спасибо за любую помощь и информацию! С уважением.

...