首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >CKEditor: PasteFromWord忽略pasteFilter

CKEditor: PasteFromWord忽略pasteFilter
EN

Stack Overflow用户
提问于 2017-08-04 16:02:14
回答 2查看 999关注 0票数 5

在Drupal4.6.2(当前捆绑在Drupal8中)中,CKEditor默认情况下是禁用的,以确保一些特殊的插件能够正常工作。因此,需要说明的是:我不想启用ACF,也不能使用allowedContentdisallowedContent。我正在尝试防止从Word粘贴的一些元素(如h1p[styles])被注入。

为了做到这一点,我正在尝试将这些添加到pasteFilter中,它在非Word粘贴的内容上工作得很好,但是当从Word粘贴pasteFilter时,似乎忽略了它?这是一个bug吗?

那么,我该如何:

  1. Keep ACF禁用了缩进-支持特殊的Drupal elements
  2. Keep pastefromword启用了-检测特殊的单词样式,如缩进和附加筛选,以便从所有Word粘贴(包括Word)粘贴-删除一些元素和属性,如h1、<代码>D28等...<代码>H229<代码>G230
EN

回答 2

Stack Overflow用户

发布于 2017-08-18 16:11:57

处理从Word粘贴的内容需要进行大量的标记处理,以便将其转换为干净的语义内容。从单词过滤器粘贴是非常具体的,涵盖了许多边缘情况(特别是嵌套列表)。从Word粘贴有自己的筛选器而不重用ACF规则的原因是它可能会导致一些冲突-这在this issue中有描述。

就目前而言,现在有一种开箱即用的方法,可以为从Word粘贴的内容添加额外的过滤。但是,您可以使用afterPasteFromWord事件来过滤粘贴的数据,如下所示:

代码语言:javascript
复制
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上的官方文档。

票数 4
EN

Stack Overflow用户

发布于 2018-06-01 02:58:42

这是我目前的解决方案,作为一个插件:

代码语言:javascript
复制
// Activate the ACF filter only when pasting from Word (the opposite of the default).
// Use config.pasteFilter='semantic-content' to filter non-Word pasted content.
// Tested with ckeditor 4.8.
CKEDITOR.plugins.add('filterOnlyOnPaste', {
    init: function(editor) {
        editor.on('setData', function(evt) {
            editor.activeFilter.disabled = true;
        });
        editor.on('instanceReady', function(evt) {
            editor.activeFilter.disabled = true;
        });
        editor.on('afterPasteFromWord', function(e) {
            editor.activeFilter.disabled = false;
            var filter = editor.activeFilter,
                fragment = CKEDITOR.htmlParser.fragment.fromHtml(e.data.dataValue),
                writer = new CKEDITOR.htmlParser.basicWriter();
            filter.applyTo(fragment);
            fragment.writeHtml(writer);
            e.data.dataValue = writer.getHtml();
            editor.activeFilter.disabled = true;
        });
    }
});
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45501341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档