У меня есть сервисный работник, который я использую для включения автономной версии моего сайта. Это прекрасно работает. У меня также есть приложение для Android, которое по сути является просто оболочкой для веб-просмотра, загружающего мой сайт.
Все было в порядке и до тех пор, пока 2-3 недели назад запрос Fetch () не начал работать сразу же. Это происходит только при запуске через веб-просмотр Android. Запуск через браузер работает нормально. Если ресурс уже кэширован (то есть через событие установки), то он отлично работает, только когда я получаю страницу, которая не кэшируется.
Код моего сервисного работника:
self.addEventListener("fetch", function (event) {
if (event.request.method !== 'GET'
|| event.request.url.toLowerCase().indexOf('//ws') > -1
|| event.request.url.toLowerCase().indexOf('localws') > -1) {
// Don't intercept requests made to the web service
// If we don't block the event as shown below, then the request will go to
// the network as usual.
return;
}
event.respondWith(async function () {
// override the default behavior
var oCache = await caches.open('cp_' + version);
var cached = await oCache.match(event.request.url);
if (cached && cached.status < 300) {
return cached;
}
// Need to make a call to the network
try {
var oResp = await fetch(event.request); // THIS LINE CAUSES THE PROBLEM!!!
return oResp;
} catch (oError) {
console.log('SW WORKER: fetch request to network failed.', event.request);
return new Response('<h1>Offline_sw.js: An error has occured. Please try again.</h1><br><h2>Could not load URL: ' + event.request.url + '</h2>', {
status: 503,
statusText: 'Service Unavailable',
headers: new Headers({
'Content-Type': 'text/html'
})
});
}
}()); // event.respondwith
}); // fetch
Линия:
var oResp = ожидание получения (event.request);
вызывается после того, как я определил, что он не кэшируется и кажется виновником. Когда происходит ошибка, я получаю следующую ошибку в catch (): 'Failed to fetch'
Это кажется довольно общим и бесполезным. Опять же, это работает при работе через браузер, и поэтому я знаю, что это не проблема CORS, сервисный работник не в том каталоге и т. Д. Опять же, это работало до 3 недель назад, и теперь я получаю отчеты от клиентов, что это не работает ,
Вот снимок экрана фактического события. Запрос, который я отправляю:
В инструментах разработчика Chrome (используемых для отладки веб-просмотра) я вижу следующее:
Я что-то не так делаю или это ошибка в webview / chrome, которая была недавно выпущена? (Я говорю, что, поскольку Chrome обеспечивает веб-просмотр)