Приложение React JS PWA не открывается без Интернета при открытии с добавления на главный экран

Я новичок в React JS и PWA. Недавно я сделал приложение на React с функциональностью PWA. Страницы были локально кэшированы сервис-воркером. Но проблема в том, что приложение не открывается без интернета. Если я попытаюсь открыть приложение без интернета со своего мобильного телефона, оно покажет пустую белую страницу. Но если я загружаю приложение в первый раз через Интернет, а затем отключаю Интернет, в это время я могу перейти на любую страницу без Интернета. Итак, проблема в начальной загрузке. Мне нужен интернет для первоначальной загрузки. Я видел некоторые приложения PWA, которые вообще не требуют интернета для начальной загрузки, например: http://hoppscotch.io/. Как я могу решить эту проблему?

Мой код:

Манифест.json

{
  "short_name": "Al Quran",
  "name": "Full Quran with Audio",
  "icons": [
    {
      "src": "windows11/SmallTile.scale-100.png",
      "sizes": "71x71",
      "type": "image/png",
      "purpose": "any"
    },
  ...
   
  ],
  "start_url": "/",
  "display": "standalone",
  "theme_color": "#9345F2",
  "background_color": "#9345F2"
}

ServiceWorker.js

let catchName = "Cache-Control";
let catchValue = "no-cache";
let cacheName = "quran-cache-v1";
let cacheList = [
  // "https://cdn.jsdelivr.net/gh/nhridoy/quran-api@main/v1/singleSurah.min.json",
  // Extarnal CSS Files and JS and Images
  "https://fonts.googleapis.com/css2?family=Poppins:wght@300;400;600;800&display=swap",
  "https://fonts.gstatic.com/s/poppins/v19/pxiEyp8kv8JHgFVrJJfecg.woff2",
  "https://fonts.gstatic.com/s/poppins/v19/pxiByp8kv8JHgFVrLEj6Z1xlFQ.woff2",
  "https://fonts.gstatic.com/s/poppins/v19/pxiByp8kv8JHgFVrLDD4Z1xlFQ.woff2",
  "https://unpkg.com/@lottiefiles/lottie-player@latest/dist/lottie-player.js",
  "https://unpkg.com/@lottiefiles/[email protected]/dist/lottie-player.js",
  "https://assets9.lottiefiles.com/packages/lf20_5mpwodai.json",
  "https://img.icons8.com/external-color-outline-adri-ansyah/16/000000/external-islam-islam-and-ramadhan-color-outline-adri-ansyah-8.png",
  "https://img.icons8.com/external-color-outline-adri-ansyah/16/000000/external-islam-islam-and-ramadhan-color-outline-adri-ansyah-13.png",

  // Local React Files
  "/",
  "/surah",
  "/para",
  "/index.html",
  "/static/css/main.92447845.css",
  "/static/js/main.f8ea3893.js",
  "/static/js/bundle.js",
  "/static/media/logo.e4a082d466ccc7346f5b.png",
  "/manifest.json",
  "/favicon.ico",
  "/logo192.png",
  "/logo512.png",

  // "/index.js",
  // "/index.css",
  // "/logo.png",
  // "/serviceWorker.js",
  // "/src/index.js",
  // "/src/index.css",
  // "/src/App.js",
  // "/src/components/pages/Surah/Player.js",
  // "/src/components/pages/Surah/Player.css",
];

for (let index = 1; index <= 114; index++) {
  cacheList.push(`/surah/${index}`);
}
for (let index = 1; index <= 30; index++) {
  cacheList.push(`/para/${index}`);
}

self.addEventListener("install", (event) => {
  event.waitUntil(
    caches.open(cacheName).then((cache) => {
      return cache.addAll(cacheList);
    })
  );
});

self.addEventListener("fetch", (event) => {
  if (!navigator.onLine) {
    event.respondWith(
      caches.match(event.request).then((response) => {
        return response || fetch(event.request.clone());
      })
    );
  }
});

ServiceWorkerDev.js

export const serviceWorkerDev = () => {
  let serviceWorkerUrl = `${process.env.PUBLIC_URL}/serviceWorker.js`;
  navigator.serviceWorker.register(serviceWorkerUrl).then((registration) => {
    console.info("Service Worker Registered");
  });
};

I have seen some PWA apps that does not require internet at all for the initial load как это вообще сработает? Откуда будут браться файлы приложения? Согласно Википедии, PWA — это a type of application software delivered through the web
Chris G 23.03.2022 08:28

Первоначальная загрузка, вероятно, не означает самый первый раз :p

Bravo 23.03.2022 08:36
hoppscotch.io Вы можете проверить это приложение. После того, как вы добавили его на главный экран, вы можете открыть его без Интернета.
Nahidujjaman Hridoy 23.03.2022 08:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
3
42
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Итак, я нашел проблему. Оказывается, после создания приложения для реагирования оно генерирует два новых пакета для js и CSS, мне также нужно добавить их в список кеша. Я публикую ответ на случай, если кто-то еще столкнется с той же проблемой, что и я.

Да, и еще одна вещь, я нашел эти отсутствующие файлы пакетов, выполнив следующие действия.

  1. Разверните приложение React онлайн (я использовал Netlify)
  2. Сначала загрузите приложение с подключением к Интернету и позвольте сервис-воркеру зарегистрироваться.
  3. Отключите интернет и снова перезагрузите страницу.
  4. Ищите ошибки на вкладке консоли в инструментах разработчика.
  5. Нашел недостающие наборы оттуда и добавил их в cachelist.

Другой способ добавить файлы в кеш:

Вот обновленный список кеша.

  1. Создайте свой проект локально.
  2. Перейдите в build>static и найдите папку CSS и js.
  3. Добавьте все сгенерированные js и CSS в список кеша.
let cacheList = [
  ...
  "https://img.icons8.com/external-color-outline-adri-ansyah/16/000000/external-islam-islam-and-ramadhan-color-outline-adri-ansyah-13.png",

  // Local React Files
  "/",
  "/surah",
  "/para",

  "/static/js/main.bd80fb27.js", //<--- New Bundle Added
  "/static/css/main.7dc91d28.css", //<--- New Bundle Added

...
];

Другие вопросы по теме