在Drupal4.6.2(当前捆绑在Drupal8中)中,CKEditor默认情况下是禁用的,以确保一些特殊的插件能够正常工作。因此,需要说明的是:我不想启用ACF,也不能使用allowedContent
或disallowedContent
。我正在尝试防止从Word粘贴的一些元素(如h1
和p[styles]
)被注入。
为了做到这一点,我正在尝试将这些添加到pasteFilter
中,它在非Word粘贴的内容上工作得很好,但是当从Word粘贴pasteFilter
时,似乎忽略了它?这是一个bug吗?
那么,我该如何:
pastefromword
启用了-检测特殊的单词样式,如缩进和附加筛选,以便从所有Word粘贴(包括Word)粘贴-删除一些元素和属性,如h1
、<代码>D28等...<代码>H229<代码>G230发布于 2017-08-18 16:11:57
处理从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();
} );
您也可以参考CKEDITOR.filter.applyTo
和CKEDITOR.editor.activeProperty
上的官方文档。
发布于 2018-06-01 02:58:42
这是我目前的解决方案,作为一个插件:
// 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;
});
}
});
https://stackoverflow.com/questions/45501341
复制相似问题