2016-06-25 15 views
0

Das ist mein Servicemitarbeiter:Service-Worker Cachen HTML-Datei nicht

'use strict'; 


const CACHE_VERSION = 1; 
let CURRENT_CACHES = { 
    offline: 'offline-v' + CACHE_VERSION 
}; 
const OFFLINE_URL = 'offline.html'; 

function createCacheBustedRequest(url) { 
    let request = new Request(url, {cache: 'reload'}); 

    if ('cache' in request) { 
    return request; 
    } 

    let bustedUrl = new URL(url, self.location.href); 
    bustedUrl.search += (bustedUrl.search ? '&' : '') + 'cachebust=' + Date.now(); 
    return new Request(bustedUrl); 
} 

self.addEventListener('install', event => { 
    event.waitUntil(

    fetch(createCacheBustedRequest(OFFLINE_URL)).then(function(response) { 
     return caches.open(CURRENT_CACHES.offline).then(function(cache) { 
     return cache.put(OFFLINE_URL, response); 
     }); 
    }) 
); 
}); 

self.addEventListener('activate', event => { 

    let expectedCacheNames = Object.keys(CURRENT_CACHES).map(function(key) { 
    return CURRENT_CACHES[key]; 
    }); 

    event.waitUntil(
    caches.keys().then(cacheNames => { 
     return Promise.all(
     cacheNames.map(cacheName => { 
      if (expectedCacheNames.indexOf(cacheName) === -1) { 

      console.log('Deleting out of date cache:', cacheName); 
      return caches.delete(cacheName); 
      } 
     }) 
    ); 
    }) 
); 
}); 

self.addEventListener('fetch', event => { 

    if (event.request.mode === 'navigate' || 
     (event.request.method === 'GET' && 
     event.request.headers.get('accept').includes('text/html'))) { 
    console.log('Handling fetch event for', event.request.url); 
    event.respondWith(
     fetch(createCacheBustedRequest(event.request.url)).catch(error => { 

     console.log('Fetch failed; returning offline page instead.', error); 
     return caches.match(OFFLINE_URL); 
     }) 
    ); 
    } 


}); 

Es ist der Standard-Offline-Cache Servicemitarbeiter: https://googlechrome.github.io/samples/service-worker/custom-offline-page/

ich keinen Fehler in der Konsole erhalten.

In Android Chrome funktioniert das Hinzufügen der Seite zur Startseite (ich habe ein Manifest, das das Symbol und die URL definiert). Allerdings, wenn ich meine Konnektivität am Telefon ausschalten, ich eine Fehlermeldung erhalten:

Not Found 
The requested URL/offline.html was not found on this server. 

Wie kann ich dieses Problem beheben?

+0

Existiert die Datei 'offline.html'? – Marco

+0

Natürlich. Die Datei existiert und öffnet sich gut. Aber es wird nicht zwischengespeichert. –

Antwort

0

Ich denke, es ist in der Art, wie ich meine Domänen konfiguriert habe - ich habe meine/Domäne meiner/www-Domäne zugeordnet. Ich habe die const geändert OFFLINE_URL = 'offline.html'; zu const OFFLINE_URL = 'https://example.com/offline.html'; und es hat funktioniert. Die Verwendung einer absoluten URL funktioniert immer.

+0

So existierte es tatsächlich nicht an der Adresse, die Sie anforderten: D – Marco

+0

LOL. Ja. Du hattest Recht. –

Verwandte Themen