Перенос Google Workbox setDefaultHandler // setCatchHandler из версии v2 в версию v3 - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь перенести свой старый код из google workbox v2 в workbox v3, и я не могу использовать workbox.routing.registerNavigationRoute, потому что мой маршрут по умолчанию '/' (где находится мой apphell) - это среда выполнениякеш (потому что он предназначен для многоязычного веб-сайта https://www.autovisual.com с языками, помещенными в подпапку '/ fr', '/ es' ... с уникальным рабочим-сервисом в области '/').

Это код v2:

workboxSW.router.setDefaultHandler({
    handler: ({
        event
    }) => {
        return fetch(event.request);
    }
 });

workboxSW.router.setCatchHandler({
    handler: ({
        event
    }) => {
        if (event.request.mode === 'navigate') {
            return caches.match('/');
        }
        return new Response();
    }
});

Кажется довольно простым: цель состоит в том, чтобы перехватить все запросы 'навигация', которые не соответствуют ни одному другому маршруту, и отправить кэшированную версию, сначала сеть,url '/'.

Для информации в клиенте js я использую:

if ('serviceWorker' in navigator) {
    window.addEventListener('load', function() {
        caches.open('rootCacheNetworkFirst').then(function(cache) {
            cache.match('/').then(function(response) {
                if (!response) {
                    cache.add('/');
                }
            });
        });

        navigator.serviceWorker.register('/sw.js', {
            scope: "/"
        });
    });
}

Я не могу найти ни одного примера с новыми v3 workbox.routing.setDefaultHandler и workbox.routing.setCatchHandlerи я застрял: (

1 Ответ

0 голосов
/ 31 мая 2018

Я не думаю, что использование setDefaultHandler или setCatchHandler уместно для описанного варианта использования.

Чтобы выполнить то, что вы описываете, добавьте следующий код в ваш файл рабочего сервиса после все остальные маршруты регистрируются.(В Workbox v3 первый зарегистрированный маршрут имеет преимущество.) Вам просто нужно настроить NavigationRoute и зарегистрировать его:

const networkFirst = workbox.strategies.networkFirst({
  cacheName: 'your-cache-name',
});
const navigationRoute = new workbox.routing.NavigationRoute(networkFirst, {
  // Set blacklist/whitelist if you need more control
  // over which navigations are picked up.
  blacklist: [],
  whitelist: [],
});
workbox.router.registerRoute(navigationRoute);
...