在CKEditor 4.6.2(目前捆绑在Drupal 8中)默认情况下禁用ACF,以确保某些特殊插件正常工作.所以对于记录:我不想启用ACF,也不能使用allowedContent或disallowedContent.我试图阻止一些元素从Word中注入粘贴(如h1和p [styles]).
为了实现这一点,我试图将这些添加到pasteFilter,它完美地适用于非Word粘贴的内容,但是当从Word粘贴时,pasteFilter似乎被忽略了?这是一个错误吗?
那么,我怎么能:
>保持ACF禁用 – 支持特殊的Drupal元素
>保持启用pastefromword – 检测缩进和列表等特殊的Word样式.
>为所有(包括Word)粘贴添加额外的过滤 – 删除一些元素和属性,如h1,style =“font-family:Verdana”等…
最佳答案
处理从Word粘贴的内容需要进行大量的标记处理才能将其转换为干净的语义内容.来自Word过滤器的粘贴非常具体,涵盖了许多边缘情况(特别是嵌套列表).从Word粘贴它有自己的过滤器并且不重用ACF规则的原因是它可能引起一些冲突 – 它在this issue中描述.
至于现在,现在有一种开箱即用的方法可以为从Word粘贴的内容添加额外的过滤功能.但是,您可以使用afterPasteFromWord
事件来过滤粘贴的数据,如:
var editor = CKEDITOR.replace( 'editor1' );
editor.on( 'afterPasteFromWord',function( evt ) {
var filter = editor.activeFilter,// Use activeFilter so it reflects ACF settings.
// var filter = new CKEDITOR.filter( 'p b' ),// Use custom new filter.
fragment = CKEDITOR.htmlParser.fragment.fromHtml( evt.data.dataValue ),writer = new CKEDITOR.htmlParser.basicWriter();
filter.applyTo( fragment );
fragment.writeHtml( writer );
evt.data.dataValue = writer.getHtml();
} );
您也可以参考CKEDITOR.filter.applyTo
和CKEDITOR.editor.activeProperty
的官方文档.