Wie lösche ich einen Browser-Cache mit JavaScript?
Wir haben den neuesten JavaScript-Code bereitgestellt, können jedoch den neuesten JavaScript-Code nicht abrufen.
Anmerkung der Redaktion: Diese Frage wird an den folgenden Stellen halb dupliziert, und die Antwort in der ersten der folgenden Fragen ist wahrscheinlich die beste. Diese akzeptierte Antwort ist nicht mehr die ideale Lösung.
Wie kann man den Browser zwingen, zwischengespeicherte CSS / JS-Dateien neu zu laden?
Wie kann ich Clients zwingen, JavaScript-Dateien zu aktualisieren?
Laden Sie lokale Javascript-Quell- / JSON-Daten dynamisch neu
javascript
caching
Dylan Brams
quelle
quelle
?version=xxx
über einen Erstellungsschritt eine an Ihre JS-verknüpften Dateien anzuhängen . Bei jedem neuen Build wird eine neue Version der JS-Datei angefordert.Antworten:
Sie können window.location.reload (true) aufrufen , um die aktuelle Seite neu zu laden. Es werden alle zwischengespeicherten Elemente ignoriert und neue Kopien der Seite, des CSS, der Bilder, des JavaScript usw. vom Server abgerufen. Dadurch wird nicht der gesamte Cache geleert, sondern der Cache für die Seite, auf der Sie sich befinden, wird geleert.
Ihre beste Strategie ist jedoch, den Pfad oder Dateinamen wie in verschiedenen anderen Antworten angegeben zu versionieren. Weitere Informationen finden Sie unter Überarbeiten von Dateinamen: Verwenden Sie Querystring nicht aus Gründen, die nicht
?v=n
als Versionsschema verwendet werden sollen.quelle
Sie können den Cache nicht mit Javascript leeren. Eine übliche Methode besteht darin, die Revisionsnummer oder den zuletzt aktualisierten Zeitstempel wie folgt an die Datei anzuhängen:
oder
myscript.js?updated=1234567890
quelle
Versuchen Sie, die src der JavaScript-Datei zu ändern? Davon:
Dazu:
Diese Methode sollte Ihren Browser zwingen, eine neue Kopie der JS-Datei zu laden.
quelle
Abgesehen vom stündlichen oder wöchentlichen Caching können Sie das Cache nach Dateidaten durchführen.
Beispiel (in PHP):
oder verwenden Sie sogar die Änderungszeit für Dateien:
quelle
Sie können auch erzwingen, dass der Code in PHP jede Stunde wie folgt neu geladen wird:
oder
quelle
Fügen Sie dies am Ende Ihrer Vorlage ein:
quelle
versuche es damit
Dazu:
quelle
Hier ist ein Ausschnitt dessen, was ich für mein aktuelles Projekt verwende.
Von der Steuerung:
Aus der Sicht:
Unser Veröffentlichungsprozess generiert eine Datei mit der Versionsnummer des aktuellen Builds. Dies funktioniert durch URL-Codierung dieser Datei und Verwendung als Cache-Buster. Wenn diese Datei nicht vorhanden ist, werden als Failover die Jahres- und Wochennummer verwendet, damit das Caching weiterhin funktioniert, und sie wird mindestens einmal pro Woche aktualisiert.
Dies bietet auch Cache-Busting für jedes Laden von Seiten in der Entwicklungsumgebung, sodass Entwickler sich nicht darum kümmern müssen, den Cache für Ressourcen (Javascript, CSS, Ajax-Aufrufe usw.) zu leeren.
quelle
oder Sie können einfach die js-Datei von Server zu Server mit file_get_contets lesen und dann den js-Inhalt in den Header einfügen
quelle
Vielleicht ist das "Löschen des Caches" nicht so einfach, wie es sein sollte. Anstatt den Cache in meinen Browsern zu leeren, wurde mir klar, dass durch "Berühren" der Datei das Datum der auf dem Server zwischengespeicherten Quelldatei (auf Edge, Chrome und Firefox getestet) geändert wird und die meisten Browser automatisch die aktuellste Kopie von herunterladen Was ist auf Ihrem Server (Code, Grafiken und Multimedia). Ich schlage vor, Sie kopieren einfach die aktuellsten Skripte auf den Server und "do the touch thing" -Lösung, bevor Ihr Programm ausgeführt wird. Dadurch wird das Datum aller Ihrer Problemdateien auf das aktuellste Datum und die aktuellste Uhrzeit geändert und anschließend eine neue Kopie heruntergeladen zu Ihrem Browser:
... der Rest Ihres Programms ...
Ich habe einige Zeit gebraucht, um dieses Problem zu beheben (da viele Browser unterschiedlich auf verschiedene Befehle reagieren, aber alle die Uhrzeit der Dateien überprüfen und mit Ihrer heruntergeladenen Kopie in Ihrem Browser vergleichen, wenn Datum und Uhrzeit unterschiedlich sind, wird die Aktualisierung durchgeführt) kann nicht den vermeintlich richtigen Weg gehen, es gibt immer eine andere brauchbare und bessere Lösung dafür. Beste Grüße und viel Spaß beim Zelten.
quelle
Ich hatte einige Probleme mit dem von yboussard vorgeschlagenen Code. Die innere j-Schleife hat nicht funktioniert. Hier ist der geänderte Code, den ich mit Erfolg verwende.
quelle
Wenn Sie PHP verwenden, können Sie:
quelle
Cache.delete () kann für neues Chrome, Firefox und Oper verwendet werden.
quelle
You don't have to use it in conjunction with service workers, even though it is defined in the service worker spec.
Bitte geben Sie keine falschen Informationen an. Die Cache-API ist eine andere Art von Cache als der http-Cache
Der HTTP-Cache wird ausgelöst, wenn der Server die richtigen Header sendet , auf die Sie mit javasvipt nicht zugreifen können.
Die Cache-API hingegen wird ausgelöst, wenn Sie möchten. Dies ist nützlich, wenn Sie mit einem Servicemitarbeiter zusammenarbeiten, damit Sie Anforderungen überschneiden und von diesem Cache-Typ aus beantworten können. Siehe: Abbildung 1 Abbildung 2 Kurs
Sie können diese Techniken verwenden, um immer einen frischen Inhalt für Ihre Benutzer zu haben:
Ich würde die dritte empfehlen see
quelle
Ich neige dazu, mein Framework zu versionieren und dann die Versionsnummer auf Skript- und Stilpfade anzuwenden
quelle
Schließen und öffnen Sie den Browser, nachdem Sie den Code in der Konsole ausgeführt haben.
quelle
Sie können das Browser-Caching auch mit Meta-HTML-Tags deaktivieren. Fügen Sie einfach HTML-Tags in den Kopfbereich ein, um zu vermeiden, dass die Webseite beim Codieren / Testen zwischengespeichert wird. Wenn Sie fertig sind, können Sie die Meta-Tags entfernen.
(im Kopfbereich)
Aktualisieren Sie Ihre Seite, nachdem Sie diese in den Kopf eingefügt haben, und aktualisieren Sie auch den neuen Javascript-Code.
Über diesen Link erhalten Sie weitere Optionen, falls Sie diese benötigen. Http://cristian.sulea.net/blog/disable-browser-caching-with-meta-html-tags/
oder Sie können einfach eine Schaltfläche wie diese erstellen
Es wird aktualisiert und das Zwischenspeichern vermieden. Es wird jedoch auf Ihrer Seite angezeigt, bis Sie den Test abgeschlossen haben. Anschließend können Sie es entfernen. Faust Option ist am besten ich Sache.
quelle
Da der Browser denselben Link zwischenspeichert, sollten Sie ein zufälliges Ende der URL hinzufügen.
new Date().getTime()
eine andere Nummer generieren.Fügen Sie einfach das
new Date().getTime()
Ende des Links wie einen Anruf hinzuAusgabe:
https://stackoverflow.com/questions.php?1571737901173
quelle
window.location.reload(true)
scheint vom HTML5-Standard veraltet zu sein. Eine Möglichkeit, dies ohne Verwendung von Abfragezeichenfolgen zu tun, besteht darin, denClear-Site-Data
Header zu verwenden , der standardisiert zu sein scheint .quelle