Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.02.2024, 12:21
Новичок на форуме
Отправить личное сообщение для Лена Лапина Посмотреть профиль Найти все сообщения от Лена Лапина
 
Регистрация: 19.02.2016
Сообщений: 7

PWA service worker без подключения внешнего файла sw.js
Доброго времени суток! Пытаюсь настроить установку PWA приложения с сайта без подключения внешних файлов.
Подскажите пожалуйста есть ли способ встроить service worker в index.html
Или подключить его с другого поддомена, например sw.js находится на example.com/sw.js а index.html на test.example.com/index.html.
CORS не проблема.
Спасибо!

Файл index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <title>TEST</title>
	<meta name="viewport" content="width=device-width, initial-scale=1.0">
	<meta name="theme-color" content="#46a546" />
	<link rel="manifest" href="pwa.json">
	<script>
    if ("serviceWorker" in navigator) {
        self.addEventListener("load", async () => {
            const container = navigator.serviceWorker;
            if (container.controller === null) {
                const reg = await container.register("sw.js");
            }
        });
    }
</script>
</head>
<body>
</body>
</html>


Файл service worker sw.js

'use strict';
const CACHE_STATIC = 'static-cache-v1';

function hndlEventInstall(evt) {
    async function cacheStaticFiles() {
        const files = [
            'icon.png',
        ];
        const cacheStat = await caches.open(CACHE_STATIC);
        await Promise.all(
            files.map(function (url) {
                return cacheStat.add(url).catch(function (reason) {
                    console.log(`'${url}' failed: ${String(reason)}`);
                });
            })
        );
    }

    evt.waitUntil(cacheStaticFiles());
}

function hndlEventFetch(evt) {
    async function getFromCache() {
        const cache = await self.caches.open(CACHE_STATIC);
        const cachedResponse = await cache.match(evt.request);
        if (cachedResponse) {
            return cachedResponse;
        }
        const resp = await fetch(evt.request);
        await cache.put(evt.request, resp.clone());
        return resp;
    }

    evt.respondWith(getFromCache());
}

self.addEventListener('install', hndlEventInstall);
self.addEventListener('fetch', hndlEventFetch);
Ответить с цитированием
  #2 (permalink)  
Старый 03.02.2024, 13:02
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,470

Нет. Вопрос секурности.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Push API (Web Push) + Service Worker 404NotFound Общие вопросы Javascript 0 08.08.2020 10:13
Как реализовать Service worker для дополнения контента перед первой загрузкой страниц Adamabakumov Javascript под браузер 1 02.09.2019 15:22
Кодировка внешнего JS файла - проблема в Chrome Freddis Opera, Safari и др. 3 26.07.2011 21:48