wake-up-neo.com

Erzwinge, dass CKEDITOR die Konfiguration aktualisiert

Ich habe eine CMS-Anwendung erstellt, die CKEDITOR verwendet. Wenn ich CKEDITOR um einige Funktionen füge, muss ich die CKEDITOR-Datei .js /.css aktualisieren.

CKEDITOR zwingt den Browser jedoch zum Zwischenspeichern.

Ich sehe, dass es einen Querystring für alle .js/.css-Dateien verwendet

Diese Querzeichenfolge spiegelt die CKEDITOR-Version wider, die ich vermute:

/Js/ckeditor/config.js?t=CAPD
/Js/ckeditor/lang/it.js?t=CAPD
/Js/ckeditor/plugins/onchange/plugin.js?t=CAPD

Gibt es eine eingebettete Methode, um dies in CKEDITOR zu tun?

Ich konnte nichts in der Dokumentation finden. Ich verwende CKEDITOR 4

Das Hauptproblem besteht darin, dass beim Hochladen einiger Änderungen diese nicht von den Clients aktualisiert werden und neue Funktionen nicht verfügbar sind. Im schlimmsten Fall funktioniert CKEDITOR nicht.

22
giammin

Ich habe einen ziemlich eleganten Weg gefunden:

Es ist genug zu setzen:

CKEDITOR.timestamp='ABCD';

direkt nachdem Sie ckeditor.js verlinkt haben oder bevor der ckeditor alle seine Dateien lädt

dies ist die Variable, die CKEDITOR verwendet, um allen .js-.css-Dateien, die dynamisch geladen werden, Zeitstempel hinzuzufügen.

Jedes Mal, wenn ich diese Dateien ändere, aktualisiere ich diese Variable, und Browser laden sie neu.

48
giammin

So habe ich das Problem behoben. Fügen Sie in Ihrer /ckeditor/config.js folgende Zeile hinzu:

CKEDITOR.timestamp = 'something_random'; 

Aktualisieren Sie "something_random" jedes Mal, wenn Sie Plugin-Updates haben.

Stellen Sie sicher, dass auf Ihrer Seite, die sie verwendet, die Ressourcen wie folgt geladen werden:

<script type="text/javascript" src="/ckeditor/ckeditor.js"></script>
<script src="/ckeditor/config.js?v=something_random"></script>

Dadurch wird die config.js zweimal geladen, da CKEditor sie selbst lädt. Dies funktioniert jedoch weiterhin einwandfrei. Dies gibt Ihnen die Kontrolle, die Sie benötigen, um eine automatische Aktualisierung aller Browser zu erhalten. Ich bin ein .NET-Entwickler und füge tatsächlich die Datei /ckeditor/config.js in meinen Bundler ein, sodass die Version automatisch auf den Querystring geladen wird. Wenn Sie jedoch keinen fantastischen Bundler verwenden, machen Sie einfach das, was ich oben angegeben habe das? v = etwas Zufall. 

1
palmej2

Ich habe eine viel einfachere Methode gefunden, falls jemand noch immer frustriert ist.

Wenn Sie die Konfigurationsdatei-URL mit dem angehängten Zeitstempel (z. B.? T = XYZD) in Ihrem Browser öffnen, sie hart aktualisieren, dann zu Ihrer Anwendungsseite zurückkehren und diese aktualisieren, sollten Sie die neue Version der Konfigurationsdatei erhalten.

Sie müssen den gleichen Zeitstempel verwenden, den ckeditor in der Quelle der Seite festgelegt hat. Wenn Sie Entwicklertools oder Firebug verwenden, erhalten Sie durch die Eingabe von CKEDITOR.timestamp in die Konsole den zu verwendenden Wert.

1

Für mich funktioniert CKEDITOR.timestamp = +new Date super fein. Ich habe es in eine JS geschrieben, die geladen wird, bevor andere CKEditor JS geladen werden ( siehe mein benutzerdefiniertes Drupal-Modul ).

Jetzt wird die Abfrage, die an das benutzerdefinierte Plug-In oder die benutzerdefinierte Konfigurations-JS angehängt wird, jedes Mal aktualisiert, wenn ich meinen Browser neu lade. Ich denke, das funktioniert vielleicht auch mit benutzerdefiniertem CSS, aber ich habe das nicht getestet.

1
leymannx

Die Timestamp-Lösung hat für mich nicht funktioniert. Falls also jemand anderes das gleiche Problem hat, habe ich das? V = date an die Stelle angehängt, an der ckeditor.js enthalten ist, und dann erneut in ckeditor.js, auf die auf config.js verwiesen wird. 

Es scheint, dass der neue Zeitstempel nicht verwendet wird, da config.js zwischengespeichert wird. Zumindest nicht nach ein paar Aktualisierungen, aber das kann ich meinen Benutzern nicht sagen.

0
Nick Zinger

Fügen Sie ckeditor.js den folgenden Code hinzu

/*Lets Create a random number*/

 function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}
var rString = randomString(4, '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');

Ersetzen Sie danach den Wert timestamp:rString in ckeditor.js.

0
Jawwad Ahmed

Dieser Trick funktioniert in Firefox nicht nur für CKEditor, sondern für jede Seite, auf der Sie das lokale Caching umschalten möchten.

  1. Öffnen Sie die Firefox-Debug-Konsole (F12).
  2. Öffnen Sie die Konsoleneinstellungen (F1).
  3. Aktivieren Sie "HTTP-Cache deaktivieren (wenn Toolbox geöffnet ist)".
  4. Konsole offen halten :)

Nach einer kurzen Überprüfung konnte ich weder in Chrome noch im IE eine ähnliche Einstellung finden.

HTH

0
Kidquick

Sie können immer einen eindeutigen Zeitstempel als Variable in Ihre URL einfügen oder einfach eine harte Aktualisierung durchführen (STRG + F5).

0
Bas Tuijnman