web-dev-qa-db-ja.com

CKEDITORに設定を更新させる

CKEDITORを使用するcmsアプリケーションを作成し、CKEDITORにいくつかの機能を追加するときに、CKEDITOR .js /.cssファイルを更新する必要があります。

しかし、CKEDITORはブラウザにそれらを強制的にキャッシュさせます。

すべての.js/.cssファイルにクエリ文字列を使用していることがわかります

このクエリ文字列は、私が想定しているCKEDITORのバージョンを反映しています。

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

CKEDITORでそれを行うための埋め込みメソッドはありますか?

ドキュメントに何も見つかりませんでした。 CKEDITOR 4を使用しています

主な問題は、一部の変更をアップロードすると、クライアントによって更新されず、新しい機能が利用できないか、最悪の場合、CKEDITORが機能しないことです。

28
giammin

私はかなりエレガントな方法を見つけました:

設定するだけで十分です:

CKEDITOR.timestamp='ABCD';

ckeditor.jsをリンクした直後またはckeditorがすべてのファイルをロードする前

これは、CKEDITORが動的にロードするすべての.js .cssファイルにタイムスタンプを追加するために使用する変数です。

したがって、これらのファイルを変更するたびに、その変数を更新し、ブラウザーはそれらを再ロードします。

53
giammin

これを修正するために私がしたことは次のとおりです。 /ckeditor/config.jsに次の行を追加します。

CKEDITOR.timestamp = 'something_random'; 

プラグインを更新するたびに「something_random」を更新します。

それを使用するページで、次のようにリソースを確認してロードします。

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

これを行うと、CKEditorが独自にconfig.jsをロードするため、config.jsは2回ロードされますが、引き続き正常に機能し、すべてのブラウザーで自動更新を取得するために必要なコントロールが提供されます。私は.NET開発者で、実際には/ckeditor/config.jsを私のバンドラーに入れているので、クエリ文字列のバージョンが自動的に取得されますが、高級なバンドラーを使用していない場合は、上記で手動で言ったことを実行してください?v = something_random。

2
palmej2

まだ誰もがこれにイライラしている場合に備えて、私ははるかに簡単な方法を見つけました。

タイムスタンプが付加された構成ファイルのURL(例:?t = XYZD)をブラウザーで開いた場合は、ハードリフレッシュしてからアプリケーションページに戻り、それをリフレッシュすると、構成ファイルの新しいバージョンが表示されます。

ページのソースでckeditorによって設定されたものと同じタイムスタンプを使用する必要があります。開発者ツールまたはFirebugを使用している場合、コンソールにCKEDITOR.timestampと入力すると、使用する値が得られます。

1

私にとってはCKEDITOR.timestamp = +new Dateは非常にうまく機能します。他のCKEditor JSがロードされる前にロードされるJSでそれを書きました( 私のカスタムを参照Drupal module ))。

これで、ブラウザーをリロードするたびに、カスタムプラグインまたはカスタム構成JSに追加されるクエリが更新されます。カスタムCSSでも同様に機能すると思いますが、テストしていません。

1
leymannx

タイムスタンプソリューションが機能しなかったため、他の誰かが同じ問題を抱えている場合は、ckeditor.jsを含めている場所に?v = dateを追加し、config.jsが参照されているckeditor.js内に再度追加しました。

Config.jsがキャッシュされているため、新しいタイムスタンプが使用されていないようです。少なくとも数回の更新が完了するまではそうではありませんが、これはユーザーに指示できることではありません。

0
Nick Zinger

次のコードを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');

その後、ckeditor.jsの値timestamp:rStringを置き換えます。

0
Jawwad Ahmed

機能するメソッドは、新しいサブカタログに設定およびcssファイルを改善したCKEDITORを配置します。

src = "/ ckeditor_new_one/ckeditor.js"

0
wloges

このトリックは、FirefoxでCKEditorだけでなく、ローカルキャッシュを切り替えたいページでも機能します。

  1. Firefoxデバッグコンソール(F12)を開きます。
  2. コンソール設定(F1)を開きます。
  3. 「HTTPキャッシュを無効にする(ツールボックスが開いている場合)」を有効にします。
  4. コンソールを開いたままにします:)

非常に短いチェックの結果、Chrome IEでも同様の設定が見つかりませんでした。

HTH

0
Kidquick

常に一意のタイムスタンプをURLの変数として追加するか、ハードリフレッシュを行う(CTRL + F5)

0
Bas Tuijnman