2015-09-25 10 views
6

Ich habe zwei verschiedene Arten versucht, und beide funktionieren nicht:Wie mache ich eine Skriptaktualisierung für Browser, wenn Manifest-Updates, aber Caching erlauben?

1. Aktualisieren Sie das Manifest so sieht Browser gibt es Änderungen und Aktualisierungen

Dies aktualisiert alle Dateien außer JavaScript-Dateien. Der Browser sieht einen Unterschied, lädt alles herunter (einschließlich JavaScript-Dateien), verwendet aber die zwischengespeicherte Version der JavaScript-Dateien.

2. Senden no-cache-Header (siehe Code unten) Caching von Skript zu stoppen Dateien

Dies bewirkt, dass der Browser einen Fehler werfen und nichts mehr zwischenzuspeichern. Es besagt, dass ein ApplicationCache-Fehler aufgetreten ist.

Der no-cache-Code:

<filesMatch "\.(js)$"> 
    FileETag None 
    <ifModule mod_headers.c> 
     Header unset ETag 
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" 
     Header set Pragma "no-cache" 
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" 
    </ifModule> 
</filesMatch> 

Die oben macht alle Browser nicht Cache die App für die Offline-Nutzung.

Gibt es einen Weg um dies?

+0

Zunächst ist zu beachten, scheint die Anwendung Cache veraltet werden (aber immer noch die einzige Lösung): https://developer.mozilla.org/en-US/docs/Web/HTML/Using_the_application_cache Wie wissen Sie, dass die Browser lädt die Skripte herunter? Ich finde es schwer zu glauben, dass es erfolgreich lädt, aber es nicht verwendet. Es könnte einen "304 - Nicht geändert" Status geben. – msoft

Antwort

1

Ich habe keine ausreichende Perspektive, um zu sagen, ob dies eine Best Practice ist, aber wenn unser Team Javascript ändert, erhöhen wir eine Abfragezeichenfolgenvariable am Ende des Pfades.

<script type="text/javascript" src="/path/to/script.js?v=10"></script> 

Hinweis die v = 10 am Ende des src-Attribut. Dies bedeutet für den Browser, dass eine andere Datei abgerufen wird, und umgeht daher den Cache.

Ich nahm diese Methode auf, indem ich die bestehende Praxis der Mitarbeiter befolgte.

+0

Das ist keine schlechte Lösung, und ich würde es automatisch auch das Manifest aktualisieren (weil es im Manifest übereinstimmen muss) –