Я настроил сервисного работника, который выглядит ниже
importScripts('../workbox/workbox-sw.js');
workbox.setConfig({
modulePathPrefix: '../workbox/',
debug: true
});
if (workbox) {
console.log(`Workbox is loaded`);
workbox.core.skipWaiting();
workbox.core.clientsClaim();
workbox.routing.registerRoute(
new RegExp('app.nocache.js'),
new workbox.strategies.StaleWhileRevalidate({cacheName: 'my-cache-name'
})
);
workbox.precaching.precacheAndRoute([
{ url: '0E0C4EA07B15355F28CED29C876DF3EE.c.html', revision: '3.6.3-SNAPSHOT'},
...
], {
ignoreURLParametersMatching: [/.*/]
});
} else {
console.log(`Workbox didn't load`);
}
для приложения на основе GWT. Это означает, что сервисный работник зарегистрирован из кода, запущенного из iframe (я загрузил его из перестановки GWT html).
Преобразование работает отлично. Однако у меня есть проблема с файлом app.nocache. js GWT. Я зарегистрировал маршрут для этого указанного c файла, чтобы он обновлялся при обновлении приложения.
Однако кэш для маршрутизации (НЕ предварительный кэш) очищается, если я выключаю приложение на Android и перезапустите его снова в автономном режиме. Это означает, что если я перезапущу планшет в автономном режиме, мое приложение не сможет запуститься.
Когда я выполняю аналогичный тест на рабочем столе, ie. выключите браузер, отсоедините сетевой кабель и затем снова запустите браузер, затем приложение запустится нормально (Ma c ОС Catalina, Chrome 79.0.3945.88).
Когда я устанавливаю страницу как приложение , выключите Chrome и запустите приложение с отключенным сетевым кабелем, как если бы это было обычное установленное приложение, тест также ПРОЙДЕТ.
Когда я делаю точно такой же тест на Android, но с вкладкой браузера а не приложение PWA, запущенное с рабочего стола, затем тест также проходит.
Кроме того, перевод приложения в фоновый режим на Android не приводит к сбою теста.
Я использую рабочая коробка 4.3.1. Я использую Chrome 79.0.3945.93 на Android планшете (также пробовал с Chrome Beta - то же самое поведение).
Я не уверен, является ли это спецификацией рабочей области c. Это могут быть некоторые причуды низкого уровня PWA-устройства.
Одна заметка. Примерно 1 из 10 раз я заставляю его работать в этом сценарии PWA / Android, который не работает большую часть времени. Это может указывать на какое-то состояние гонки.