2017-08-02 2 views
8

Also, ich habe eine HTML-Seite mit Service-Arbeiter, der Service-Arbeiter Cache die index.html und meine JS-Dateien.So löschen Sie den Cache des Service-Arbeiters?

Das Problem ist, wenn ich die JS ändern, wird die Änderung nicht direkt im Client-Browser angezeigt. Natürlich kann ich in Chrome Dev-Tools den Cache deaktivieren. Aber in Chrome Mobile, wie mache ich das?

Ich habe versucht, auf die Site-Einstellungen zuzugreifen und die CLEAR% RESET-Taste zu drücken. Aber es lädt immer noch die alte Seite/laden aus dem Cache. Ich habe versucht, andere Browser oder Chrom Inkognito zu verwenden und es lädt die neue Seite.

Dann versuche ich meine Browserdaten löschen (nur Cache) und es funktioniert.

Ich denke, das ist nicht, wie es richtig funktionieren sollte? Mein Benutzer wird nicht wissen, ob die Seite aktualisiert wird, ohne den Chrome-Browser-Cache zu löschen.

Antwort

10

verwenden veralteter Caches löschen:

self.addEventListener('activate', function(event) { 
    event.waitUntil(
    caches.keys().then(function(cacheNames) { 
     return Promise.all(
     cacheNames.filter(function(cacheName) { 
      // Return true if you want to remove this cache, 
      // but remember that caches are shared across 
      // the whole origin 
     }).map(function(cacheName) { 
      return caches.delete(cacheName); 
     }) 
    ); 
    }) 
); 
}); 
+2

Was ist 'selbst' hier? Das Fensterobjekt oder ein Servicearbeiter? – loopmode

+2

Es empfiehlt sich, bei Stack Overflow eine Erklärung hinzuzufügen, warum Ihre Lösung funktionieren sollte. Für weitere Informationen lesen Sie [Wie Sie antworten] (// stackoverflow.com/help/how-to-answer). –

13

Die other answer ist ein bisschen ausführliche und tut viel mehr als die Frage Bedürfnisse und seinen völliger Mangel an Erklärung gegeben es ein wenig Parsen im Namen erfordert des Benutzers für sie, um es in etwas zu ändern, das für sie arbeitet. Also hier ist das Einfachere;

Wenn Sie den Cache-Namen kennen, können Sie einfach caches.delete() Anruf von überall Sie mögen in den Arbeiter:

caches.delete(/*name*/); 

Und wenn Sie alle Caches wischen wollte (und nicht zu warten, für sie, sagen diese ist eine Hintergrundaufgabe) Sie brauchen nur add this:

caches.keys().then(function(names) { 
    for (let name of names) 
     caches.delete(name); 
}); 
+1

Danke dafür. Es ist viel einfacher und klarer. Ich habe meine Nachricht schnell geschrieben, um die Frage –

+1

zu beantworten. Keine Sorge. Ihr wäre perfekt, wenn jemand einen bestimmten Satz von Caches innerhalb des 'activate'-Listeners löschen wollte; Ich habe das nur gemacht, falls jemand nur einen/alle ausgeben wollte – Hashbrown

+0

Der kompakteste Code ist wahrscheinlich 'caches.keys(). Dann (cs => cs.forEach (c => caches.delete (c)))' oder für asynchrone Funktionen '(erwarten caches.keys()). ForEach (c => caches.delete (c))' –

Verwandte Themen