2017-05-25 15 views
0

私はCKEditorプラグインを開発しています。これは、適切な編集経験のために必要な複数のプラグインをすべて提供するためのものです。基本的に私は、ユーザが1つの "the_framework"プラグインを含むことができるようにしたいと思っています。これは完全な編集支援を提供する10個のプラグイン(それぞれツールバーボタンとコンテキストメニュー付きのウィジェット)を追加します。私は、これらのプラグインの読み込みを "プラグイン"設定が担当しないようにします。私の場合、それは本当にすべてか何かの命題です。プラグイン内からCKEditorプラグインを追加するにはどうすればよいですか?

私はmasterプラグインにCKEDITOR.plugins.addExternalの外部プラグインを追加しようとしましたが、ロードされませんでした。これは、pluginsまたはextraPluginsの設定で外部プラグインの名前が指定されないため、Editor.loadPluginsは決してそれらを試行しないからです。しかし、私のマスタープラグインがロードされ、onLoadを実行するまでには、すでに設定を変更することができません。

私はmultiple plugin definitions in one plugin fileを持っているとうまくいますが、エディタの設定で明示的にそれらの名前を付けていないと、まだ動作しないようです。

他のプラグインからプラグインを読み込むにはどうしたらいいですか?

答えて

0

もう少しデバッグした後、私はこれを不可能と判断しました。

外部として登録された「サブプラグイン」をロードすることを実現しました。プラグインの名前を登録した後でCKEDITOR.plugins.loadと呼ぶだけでした。これはエディタから呼び出されるのと同じメソッドですが、エディタは言語ファイルのロードや重要なコールバック(beforeInitinit、およびafterInit)を含む多くの追加ステップを追っています。すべてのアクションが発生する場所

editor.jsloadPlugins機能がありますが、エディタの設定をロードするプラグインを決定するために使用されているため、それだけで、ロードするプラグインのリストなしEditor引数を受け入れます。リストが決定されると、それらはすべて並列にロードされます。サブプラグインが最初からこの配列にない場合、後で手動でマスタープラグインをロードしても、エディタで完全に初期化されることはありません。

私が思いついた唯一の回避策は、CKEditorソース(理想的にはマスタープラグインと一緒に配布されたスクリプト)を読み込んだ後で、1つの余分なスクリプトを読み込むことです。スクリプトは外部サブプラグイン定義(実際には "master_plugin/plugins"という名前のローカルサブフォルダにあります)を設定し、instanceCreatedコールバックを登録します。これは基本的に新しいエディタの設定を見て、サブプラグインが必要かどうかを判断しますエディタが初期化される前にリストに追加されます。このうちのいずれかがプラグイン内から発生した場合、余分なスクリプトと比べて遅すぎると失敗します。

UPDATE

instanceCreatedが発生した場合、ユーザーの設定がまだエディタにロードされていないので、実際にinstanceCreatedコールバック内configLoadedリスナーを登録する必要がありました。 customConfigLoadedイベントもユーザーの設定を受信するには時期尚早であるため、pluginsまたはextendedPluginsの変更は失われます。驚いたことに、configLoadedイベントはの後にの後にいくつかの設定オプション(readOnly、enterMode、shiftEnterMode、tabIndex、skin、多分他のもの)を利用しますが、pluginsはまだ触れていません。

configLoadedイベントは、ページ提供の設定を編集するための唯一のフックポイントです。 config.customConfigオプションを使用すると、editorConfigファンクション内でcustomConfigLoadedをリッスンし、完全な設定を取得することができます。これは、CKEditorが自分のcustomConfigLoadedリスナ内のページ設定のみをマージするためです。

多くのプラグインを1つのプラグイン(アドオンパッケージ)で読み込むという本来的な目標に戻って、プラグインシステムの設計では、明らかに何も意図していません。

関連する問題