Сайт недоступен, когда я использую сервисного работника

Здравствуйте, ребята, я новичок в этой технологии, и я хотел бы попросить помощи для моего кода. То, что я пытаюсь сделать, это кэшировать файлы ресурсов и вернуться от сервисного работника.

Это код, который я использую для регистрации работника службы

if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/serviceworker.js')
.then(function(reg) {
// registration worked
console.log('Registration succeeded. Scope is ' + reg.scope);
}).catch(function(error) {
// registration failed
console.log('Registration failed with ' + error);
});
}

А это код внутри сервис-воркера

importScripts('/cache-poli.js');

var CACHE_VERSION = 'app-v2';
var CACHE_FILES = [
'/',
    '/js/plugins/bootstrap/js/bootstrap.min.js',
    '/js/plugins/bootstrap-select/bootstrap-select.min.js',
    '/js/plugins/prettyphoto/js/jquery.prettyPhoto.js',
    '/js/plugins/jquery.sticky.min.js',
    '/js/plugins/jquery.easing.min.js',
    '/js/plugins/animate/js/animate.js',
    '/js/jquery.fancybox.js',
    '/js/plugins/jquery/jquery-ui-1.11.1.min.js',
    '/js/jquery.scrollbar.min.js',
    '/js/plugins/owlcarousel2/owl.carousel.min.js',
    '/js/plugins/elevateZoom/jquery.elevateZoom-3.0.8.min.js',
    '/js/theme.js',
    '/js/cmsfuncs.js',
    '/js/theme-config.js',
    '/js/jquery.mCustomScrollbar.concat.min.js',
    '/js/plugins/jquery/jquery-2.1.4.min.js',
    '/js/jquery.cookie.js',

    '/js/plugins/bootstrap/css/bootstrap.min.css',
    '/fonts/fontawesome/css/font-awesome.min.css',
    '/fonts/webfont/css/simple-line-icons.css',
    '/fonts/elegantfont/css/elegantfont.css',
    '/js/plugins/bootstrap-select/bootstrap-select.min.css',
    '/js/plugins/owlcarousel2/assets/owl.carousel.min.css',
    '/js/plugins/prettyphoto/css/prettyPhoto.css',
    '/js/plugins/animate/css/animate.css',
    '/s/plugins/accordion/css/magicaccordion.css',
    '/css/jquery.scrollbar.css',
    '/css/megamenu.css',
    '/css/theme.css',
    '/css/slider/slide.css',
    '/css/jquery.mCustomScrollbar.css',
    '/css/responsive.css',
    '/css/theme.css'
];

self.addEventListener('install', function (event) {
event.waitUntil(
    caches.open(CACHE_VERSION)
        .then(function (cache) {
            console.log('Opened cache');
            return cache.addAll(CACHE_FILES);
        })
);
});


self.addEventListener('activate', function (event) {
event.waitUntil(
    caches.keys().then(function(keys){
        return Promise.all(keys.map(function(key, i){
            if(key !== CACHE_VERSION){
                return caches.delete(keys[i]);
            }
        }))
    })
)
});


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

Я использую инструменты разработчика Google Chrome, чтобы увидеть процесс установки, все кэшируется, как и должно, и сервисный работник не показывает ошибок, но когда я снова пытаюсь получить доступ к веб-сайту, это дает мне ошибку.

Этот сайт недоступен. Веб-страница domain.com может быть временно недоступна или навсегда перемещена на новый веб-адрес.


person SpyrosJevan    schedule 14.10.2016    source источник


Ответы (1)


У меня тоже была такая же ошибка.

На самом деле проблема вполне объяснима. Что браузер говорит, так это то, что путь, который вы пытаетесь достичь, недоступен.

В вашем коде похоже, что вы кэшировали корень '/'. Я предполагаю, что вы столкнулись с этой проблемой, когда пытались получить доступ к какому-то другому пути, например '/somepath'.
Поскольку вы не кэшировали эти , вы получали эту ошибку.

Итак, в вашем массиве, если вы также добавите:

var CACHE_FILES = ['/',
                   '/somepath', ...];

Ошибка не возникнет.

Я использовал точно такой же метод, и ошибка исчезла.

person formatkaka    schedule 13.09.2017