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