web-dev-qa-db-fra.com

Forcer CKEDITOR pour actualiser la configuration

J'ai créé une application cms qui utilise CKEDITOR et lorsque j'ajoute des fonctionnalités à CKEDITOR, j'ai besoin d'actualiser un fichier .ks /.css CKEDITOR.

Mais CKEDITOR force le navigateur à les mettre en cache.

Je vois qu'il utilise une chaîne de requête pour tous les fichiers .js/.css

Cette chaîne de requête reflète la version de CKEDITOR, je suppose:

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

Existe-t-il une méthode intégrée pour le faire dans CKEDITOR?

Je n'ai rien trouvé dans la documentation ..___ J'utilise CKEDITOR 4

Le principal problème est que, lorsque je télécharge certaines modifications, celles-ci ne sont pas mises à jour par les clients et les nouvelles fonctionnalités ne sont pas disponibles, sinon CKEDITOR ne fonctionne pas.

22
giammin

J'ai trouvé un moyen assez élégant:

Il suffit de définir:

CKEDITOR.timestamp='ABCD';

juste après le lien ckeditor.js ou de toute façon avant que ckeditor ne charge tous ses fichiers

cKEDITOR utilise cette variable pour ajouter un horodatage à tous les fichiers .js .css qu'il charge dynamiquement.

Ainsi, chaque fois que je modifie ces fichiers, je mets à jour cette variable et les navigateurs les rechargent.

48
giammin

Voici ce que j'ai fait pour le réparer. Dans votre /ckeditor/config.js, ajoutez cette ligne:

CKEDITOR.timestamp = 'something_random'; 

Mettez à jour "quelquechose_random" à chaque fois que vous avez des mises à jour de plugins.

Dans votre page qui l'utilise, assurez-vous de charger les ressources comme ceci:

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

En faisant cela, le fichier config.js sera chargé deux fois, car CKEditor le chargera tout seul, mais il fonctionnera toujours correctement et vous donnera le contrôle nécessaire pour obtenir une actualisation automatique sur tous les navigateurs. Je suis un développeur .NET et, en fait, j'ai placé le fichier /ckeditor/config.js dans mon bundler. La version apparaît donc automatiquement dans la chaîne de requête, mais si vous n'utilisez pas un bundler fantaisie, faites ce que je viens de dire manuellement avec le? v = quelque chose de 

1
palmej2

J'ai trouvé une méthode beaucoup plus simple, au cas où quelqu'un serait toujours frustré par cela.

Si vous ouvrez l'URL du fichier de configuration avec l'horodatage ajouté (par exemple?? T = XYZD) dans votre navigateur, actualisez-le de manière irréversible, puis revenez à la page de votre application et actualisez-le. Vous devriez donc obtenir la nouvelle version du fichier de configuration.

Vous devez utiliser le même horodatage que celui défini par ckeditor dans le source de la page. Si vous utilisez des outils de développement ou Firebug, taper CKEDITOR.timestamp dans la console vous donnera la valeur à utiliser.

1
Alfred Armstrong

Pour moi, régler CKEDITOR.timestamp = +new Date fonctionne très bien. Je l'ai écrit dans un JS qui sera chargé avant tout autre JS de CKEditor ( voir mon module Drupal personnalisé ).

Maintenant, la requête qui est ajoutée au plugin personnalisé ou à la configuration personnalisée JS est actualisée à chaque rechargement de mon navigateur. Je suppose que cela pourrait également fonctionner avec du CSS personnalisé, mais je n’ai pas testé cela.

1
leymannx

La solution d'horodatage ne fonctionnait pas pour moi, donc si quelqu'un d'autre a le même problème, j'ai ajouté? V = date à l'endroit où j'inclus ckeditor.js, puis à nouveau dans ckeditor.js, où config.js est référencé. 

Il semble que puisque config.js est mis en cache, le nouvel horodatage ne soit pas utilisé. Du moins pas après quelques rafraîchissements, mais ce n'est pas quelque chose que je peux dire à mes utilisateurs de faire.

0
Nick Zinger

Ajoutez le code suivant à ckeditor.js

/*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');

Après cela, remplacez la valeur timestamp:rString dans ckeditor.js.

0
Jawwad Ahmed

Vous pouvez toujours ajouter un horodatage unique en tant que variable dans votre URL ou simplement effectuer une actualisation forcée (CTRL + F5).

0
Bas Tuijnman