如何在插件中添加CKEditor插件?

时间:2017-05-25 21:29:59

标签: ckeditor ckeditor4.x

我正在开发一个CKEditor插件,我想成为提供正确编辑体验所需的多个插件的工具。基本上我希望用户能够包含一个" the_framework"插件,它又添加了10个插件(每个插件都带有工具栏按钮和可能的上下文菜单),提供完整的编辑支持。我不想要"插件"配置负责加载这些插件。在我的案例中,它确实是一个全有或全无的主张。

我已尝试让主插件添加CKEDITOR.plugins.addExternal的外部插件,但它们不会加载。我现在意识到这是因为pluginsextraPlugins配置并没有为外部插件命名,因此Editor.loadPlugins永远不会尝试它们。但是,当我的主插件加载并执行onLoad时,它已经来不及更改配置。

我可以使用multiple plugin definitions in one plugin file,但如果编辑器配置没有明确地命名它们,它似乎仍然无法正常工作。

如何从其他插件加载插件?

1 个答案:

答案 0 :(得分:0)

经过一些调试后,我确定这是不可能的。

我意识到要加载"子插件"注册为外部我只需要在注册后使用插件的名称调用CKEDITOR.plugins.load。这与编辑器调用的方法相同,但编辑器会跟进许多额外步骤,包括加载语言文件和关键回调(beforeInitinitafterInit)。

editor.js loadPlugins函数是所有操作发生的地方,但它只接受Editor参数而没有要加载的插件列表,因为编辑器的配置是用于确定要加载的插件。确定列表后,它们全部并行加载。如果子插件从一开始就不在这个数组中,即使主插件稍后手动加载它们,它们也永远不会用编辑器完全初始化。

我提出的唯一解决方法是在加载CKEditor源之后加载一个额外的脚本,理想情况下是使用master插件分发的脚本。该脚本设置外部子插件定义(实际上位于名为&#34的本地子文件夹; master_plugin / plugins")并注册instanceCreated回调,基本上是查看新编辑器&#39 ; s config并确定在编辑器初始化之前是否需要将子插件添加到列表中。如果任何一个插件发生在插件中,与额外的脚本相比,则为时已晚,它将失败。

<强>更新

实际上有必要在configLoaded回调中注册instanceCreated侦听器,因为当instanceCreated发生时,用户的配置尚未加载到编辑器中。 customConfigLoaded事件也太早,无法接收用户的配置,因此对pluginsextendedPlugins的任何修改仍将丢失。令人惊讶的是,{/ 1>}事件在编辑器使用了几个配置选项(readOnly,enterMode,shiftEnterMode,tabIndex,skin,或许其他)之后被激活,但configLoaded不是但感动了。

plugins事件是我能找到的唯一保证编辑页面提供的配置的钩点。使用configLoaded选项,可以在editorConfig函数中侦听config.customConfig并获取完整配置,因为CKEditor仅在其自己的customConfigLoaded内合并页面配置监听器。 (操作顺序使这成为可能。)

回到通过单个插件(附加软件包)加载许多插件的最初目标,这是可能的,但显然插件系统的设计没有任何意图。