Сервисный работник выбирает ресурсы c для многоязычного сайта - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть сайт stati c (созданный с помощью Pelican) с многоязычной структурой, например,

www.example.com/
www.example.com/index.html
www.example.com/page1.html
www.example.com/es/
www.example.com/es/index.html
www.example.com/es/page1.html

Я кэшировал JS и CSS и индексные файлы с событие установки сервисного работника:

const staticCacheName = 'static-cache-v5';

const filesToCache = [
  '/',
  '/index.html',
  '/es/index.html',
  '/offline.html',
  'static/js/main..js',
  'static/css/styles.css',
]


self.addEventListener('install', (event) => {
  event.waitUntil(
    caches.open(staticCacheName).then((cache) => {
      return cache.addAll(filesToCache);
    })
  );

  self.skipWaiting();
});

, и я использую кеш, возвращаясь к сетевой стратегии:

self.addEventListener('fetch', function(event) {
  event.respondWith(
    caches.match(event.request).then(function(response) {
      return response || fetch(event.request);
    })
  );
});

У меня возникает проблема, когда www.example.com/es/index.html или es/offline.html доступен в автономном режиме и загружает файлы CSS и JS. Проблема заключается в том, что поскольку файлы es / index. html ссылаются на CSS и JS как ../static/css/styles.css и ../static/js/main.js, они не могут найти файлы в кэше. Я пытался найти способ изменить запрос и ответ, но пока что мне не удалось. Любая помощь?

1 Ответ

0 голосов
/ 16 февраля 2020

Ну, вы можете написать в своем коде логи c, где caches.match(event.request) изменяется на что-то вроде caches.match(event.request) || caches.match(*canonical-url*) (в псевдокоде). Возможно, у вас есть ошибка в вашем коде, если вы уже пробовали это. Другой вариант - дважды кэшировать файлы с их root -относительными путями и их каноническими путями "../". Это, конечно, не оптимально, так как кеш используется дважды.

Я думаю, что лучшим вариантом будет создание вашего сайта, чтобы он всегда использовал root -относительные stati c пути активов. Замените все "../static/bla" на "/ static / bla", и все должно работать из коробки очень аккуратно:)

...