Javascript CKEditor:PasteFromWord忽略pasteFilter

Javascript CKEditor:PasteFromWord忽略pasteFilter,javascript,ckeditor,drupal-8,Javascript,Ckeditor,Drupal 8,在CKEditor 4.6.2(目前捆绑在Drupal 8中)中,默认情况下禁用ACF,以确保某些特殊插件正常工作。因此,作为记录:我不想启用ACF,也不能使用allowedContent或disallowedContent。我正试图阻止一些元素被注入Word的粘贴中(比如h1和p[style]) 为了实现这一点,我尝试将它们添加到pasteFilter中,它可以完美地处理非Word粘贴的内容,但是从Word粘贴时,似乎忽略了pasteFilter?这是虫子吗 那么,我怎样才能: 禁用ACF-支

在CKEditor 4.6.2(目前捆绑在Drupal 8中)中,默认情况下禁用ACF,以确保某些特殊插件正常工作。因此,作为记录:我不想启用ACF,也不能使用
allowedContent
disallowedContent
。我正试图阻止一些元素被注入Word的粘贴中(比如
h1
p[style]

为了实现这一点,我尝试将它们添加到
pasteFilter
中,它可以完美地处理非Word粘贴的内容,但是从Word粘贴时,似乎忽略了
pasteFilter
?这是虫子吗

那么,我怎样才能:

  • 禁用ACF-支持特殊Drupal元素
  • 保持启用
    pastefromword
    以检测特殊的单词样式,如缩进和列表
  • 向所有(包括Word)粘贴添加附加筛选-删除某些元素和属性,如
    h1
    style=“font-family:Verdana”

  • 处理从Word粘贴的内容需要进行大量的标记处理,才能将其转换为干净的语义内容。“从Word粘贴”过滤器非常具体,涵盖了许多边缘情况(尤其是嵌套列表)。从Word粘贴有自己的过滤器,并且不重用ACF规则的原因是,它可能会导致一些冲突,如中所述

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

    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();
    } );
    
    请看


    您也可以参考和上的官方文档。

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

    // 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;
            });
        }
    });
    

    请问我应该在哪里加这个?可以将其添加到config.js吗?我能看看总配置吗?我遇到了这个问题,请在
    plugins/filternoyonpaste/plugin.js
    中输出代码。然后在
    config.js
    中的
    config.extraPlugins
    中添加
    filterOnOnyPaste
    。您可能还必须在
    config.js
    中使用
    CKEditor.plugins.addExternal('filterOnlyOnPaste','WEB_path_to_CKEditor/plugins/filterOnlyOnPaste/')为CKEditor提供插件的路径仍然不起作用。我需要禁用ACF吗?谢谢你的帮助。对不起,我不知道为什么它对你不起作用。我的配置文件中的其他一些东西(可能有用,也可能没用)是:
    delete config.allowedContent
    config.pasteFilter='semantic content'
    config.pasteFromWordPromptCleanup=false。我还使用
    config.pasteFromWord\u inlineImages=false阻止base64图像