javascript - CKEditor:PasteFromWord 忽略 pasteFilter

标签 javascript ckeditor drupal-8

在 CKEditor 4.6.2 中(目前捆绑在 Drupal 8 中)ACF 默认被禁用,以确保一些特殊插件正常工作。所以郑重声明:我不想启用 ACF,也无法使用 allowedContentdisallowedContent。我试图阻止某些元素从 Word 粘贴到粘贴上(例如 h1p[styles])。

为了实现这一点,我试图将它们添加到 pasteFilter 中,它在非 Word 粘贴的内容上完美运行,尽管从 Word 粘贴时,pasteFilter 似乎被忽视?这是一个错误吗?

那么,我怎样才能:

  1. 禁用 ACF - 支持特殊的 Drupal 元素
  2. 保持 pastefromword 启用 - 检测特殊的 Word 样式,如缩进和列表。
  3. 所有(包括来自 Word 的)粘贴添加额外的过滤 - 删除一些元素和属性,如 h1style= “字体系列: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.applyToCKEDITOR.editor.activeProperty .

关于javascript - CKEditor:PasteFromWord 忽略 pasteFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501341/

相关文章:

javascript - 如何从java脚本迭代java中ArrayList中的值?

java - 将 Freemarker 与 ckEditor(或任何 html 编辑器)一起使用时如何解决引号问题?

ckeditor - 关闭 CKEditor 的自动更正设置

drupal-8 - 如何关闭模态窗口?

drupal - 在 Drupal 8 上注册后如何重定向用户?

Drupal 8 模块开发依赖项

javascript - 使用 jquery 从多个数组集中删除特定数组

javascript - 如何使用javascript获取基于url的源代码?

javascript - 如何关闭弹出窗口并将 View 模型返回到先前的 View ?

image - 如何在CKEditor图像中添加标题属性