Почему страница моего автономного кэшированного поддомена не загружается при вызове из другого поддомена? - PullRequest
0 голосов
/ 07 августа 2020

Быстрый вопрос:

У меня есть сервисный работник, который кэширует страницу из поддомена "domainB.project.company.com" Пример: domainB.project.company.com/mypage.html Это работает, Я вижу, что активы + html кэшируются в моих Chrome Dev Tools.

Затем у меня есть еще один поддомен «domainA.project.company.com» со страницей domainA.project.company.com/ привет. html

итак, обе страницы имеют один и тот же хост ...

Теперь: mypage. html полностью кэшируется. Почему - в автономном режиме - не отображается "mypage. html" при переходе по этому URL со страницы domainA? Я думал, что это кешируется?

И как этого можно достичь с помощью сервис-воркеров?

Необходимый поток:

domainA.project.company.com / привет. html есть ссылка на domainB.project.company.com/mypage.html. domainB.project.company.com/mypage.html полностью кэшируется. пользователь переходит в автономный режим с domainA.project.company.com/hello.html, пользователь должен иметь возможность видеть кешированную страницу domainB.project.company.com/mypage.html Я могу видеть все кеши из этого источника. .. так что я подумал, что этого будет достаточно :) Я просто не могу понять: -)

Надеюсь, у кого-то есть идея, как это сделать ... (скрестив пальцы!)

Ответы [ 2 ]

0 голосов
/ 09 августа 2020

Решение было следующим:

Это был мой начальный рабочий-сервис:

importScripts(
  "https://storage.googleapis.com/workbox-cdn/releases/5.1.2/workbox-sw.js"
);

const { skipWaiting, clientsClaim } = workbox.core;
const { registerRoute } = workbox.routing;
const { StaleWhileRevalidate } = workbox.strategies;

skipWaiting();
clientsClaim();

registerRoute(
  ({ request }) => {
    console.log(" request ", request.destination);
    return (
      request.destination === "document" ||
      request.destination === "image" ||
      request.destination === "script" ||
      request.destination === "style" ||
      request.destination === "font"
    );
  },
  new StaleWhileRevalidate({
    cacheName: "wvg-forms",
  })
);


Но поскольку я загрузил страницу в iframe, request.destination будет "iframe" . Так что добавление

request.destination === "iframe" 

отсутствовало.

Теперь все работает как задумано.

И я также добавил - на всех поддоменах -

      document.domain = "company.com";

в мой раздел.

0 голосов
/ 07 августа 2020

сервис-воркеры ограничены источником и уровнем папки. Это функция безопасности.

Вы используете другое происхождение.

Почему это функция?

Вы не хотите, чтобы плохой веб-сайт увидел ваши кэшированные данные и очистил их это для плохих целей. Вы можете видеть только то, что находится в вашем источнике.

Вы также не можете получить доступ к кэшированному контенту или управляющим страницам в папках выше, где находится ваш сервис-воркер. Вот почему вы всегда помещаете своего сервис-воркера в root исходного сайта, а не в подпапку.

...