CKEditor - 如何在 2 个编辑器中一起使用高级内容过滤器和小部件

CKEditor - How to use the Advanced Content Filter and widgets together in 2 editors

我有 2 个 CKEditor 实例。一个编辑器 (A) 支持多个小部件,另一个编辑器 B 有一个 Advanced Content Filter,这些设置确保只有 <p><br><em><strong> 第二个编辑器允许使用标签:

config.allowedContent = 'p br em strong';

我的小部件包含图像和一些其他标签以及此过滤器设置:

config.allowedContent = 'img div figure figcaption';

当编辑器 A 中包含此类小部件的文本被粘贴到编辑器 B 中时,我希望编辑器删除该小部件,但事实并非如此。这是有道理的,因为小部件的 allowedContent 设置确保图像不会被删除。

但是,我的第二位编辑对这个小部件一无所知,我想配置过滤器以去除所有粘贴的小部件。

我已经尝试将 Disallowed Content 设置添加到编辑器 B:

config.disallowedContent = 'img div span figure figcaption';

但没有成功,我一直在编辑器 B 中获取小部件 div。

将小部件粘贴到 CKEditor 提供的示例编辑器的 editor 4 中也是如此。即使 ACF 不允许,也会插入小部件。

是否有另一个过滤器选项来防止小部件潜入正文?

遗憾的是,目前没有简单的方法可以使用 ACF 过滤粘贴的事件 - 请参阅 http://dev.ckeditor.com/ticket/11115。它已分配 4.5.0 里程碑,但我不认为我们会设法在这个版本中进行此更改。存在使此票证非常复杂的体系结构限制。

您可以尝试拦截 editor#paste 上的粘贴内容,解析内容并手动过滤粘贴的小部件。困难的事情(实际的 #11115 blocker) is that in the pasted content you'll find upcasted versions of widgets, with all wrappers, all internal attributes etc. ACF cannot be applied to this content directly because ACF is supposed to filter downcasted versions of widgets. Therefore you need to filter this more manually or with a special CKEDITOR.filter 实例。

你会发现这个问题很有用 - Apply CKEditor Advanced Content Filter to a string