在 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= “字体系列: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();
} );
请参阅this codepen demo .
您也可以引用官方文档 CKEDITOR.filter.applyTo
和 CKEDITOR.editor.activeProperty
.
关于javascript - CKEditor:PasteFromWord 忽略 pasteFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501341/