Как обнаружить, что у нас нет активного 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.
Я просто застрял с ним.
Спасибо за любую помощь и информацию! С уважением.