經過一些調試後,我確定這是不可能的。
我意識到要加載註冊爲外部的「子插件」,我只需在註冊它們後用插件的名稱調用CKEDITOR.plugins.load
即可。這與編輯器調用的方法相同,但是,編輯採取了許多額外的步驟,包括加載語言文件和關鍵回調(beforeInit
,init
和afterInit
)。
的editor.js
loadPlugins
功能是,所有的動作發生,但它只能接受一個Editor
說法沒有插件列表加載,因爲編輯的配置用於確定要加載的插件。一旦列表確定後,它們全部並行加載。如果子插件從一開始就不在這個數組中,即使主插件稍後手動加載它們,也不會使用編輯器完全初始化它們。
我想出的唯一解決方法是在加載CKEditor源代碼後加載一個額外的腳本,理想情況下是使用主插件分發的腳本。該腳本設置外部子插件定義(實際上位於名爲「master_plugin/plugins」的本地子文件夾中)並註冊回調,該回調基本上查看新編輯器的配置並確定子插件是否需要在編輯器初始化之前添加到列表中。如果有任何這種情況發生在一個插件中,則與額外的腳本相比,這太遲了,並且會失敗。
UPDATE
它實際上是需要註冊的instanceCreated
回調內部configLoaded
監聽器,因爲當instanceCreated
出現在用戶的配置還沒有加載到編輯器。 customConfigLoaded
事件對於接收用戶的配置還爲時尚早,因此對plugins
或extendedPlugins
的任何修改仍將丟失。令人驚訝的是,configLoaded
事件被觸發後編輯器使用了幾個配置選項(只讀,enterMode,shiftEnterMode,tabIndex,皮膚,也許其他),但plugins
尚未觸及。
configLoaded
事件是我可以找到的唯一鉤子點,以保證編輯頁面提供的配置。使用config.customConfig
選項,將有可能在editorConfig函數內偵聽customConfigLoaded
並獲得完整配置,因爲CKEditor僅在其自己的customConfigLoaded
偵聽器中合併了頁面配置。 (操作順序使這成爲可能。)
回到最初通過一個插件(附加包)加載許多插件的目標,但插件系統的設計可能顯然沒有任何意圖。