CKEditor是一个很棒的编辑器,pastefromword插件非常好.我想将插件提供的过滤应用于所有粘贴的文本.例如,从单词粘贴时,将删除所有字体和大小.从电子邮件粘贴时不会发生这种情况.
也就是说,我提出了以下解决方案并将其发布在此处以获得一些反馈.我想知道我是否过于复杂,或者是否有更简单的方法.我只是从pastefromword / plugin.js中复制了代码.
通过我的自定义config.js
... CKEDITOR.config.pasteFromWordCleanupFile = '/pastefromword.js'; ... CKEDITOR.on( 'instanceReady',function( ev ) { /** * Paste event to apply Paste From Word filtering on all text. * * The pastefromword plugin will only process text that has tell-tale signs * it is from Word. Use this hook to treat all pasted text as if * it is coming from Word. * * This method is a slightly modified version of code found in * plugins/pastefromword/plugin.js */ ev.editor.on( 'paste',function( evt ) { var data = evt.data,editor = evt.editor,content; /** * "pasteFromWordHappened" is a custom property set in custom * pastefromword.js,so that filtering does not happen twice for content * actually coming from Word. It's a dirty hack I know. */ if( editor.pasteFromWordHappened ) { // Reset property and exit paste event editor.pasteFromWordHappened = 0; return; } var loadRules = function( callback ) { var isLoaded = CKEDITOR.cleanWord; if( isLoaded ) { callback(); } else { CKEDITOR.scriptLoader.load( CKEDITOR.config.pasteFromWordCleanupFile,callback,null,false,true ); } return !isLoaded; }; content = data['html']; // No need to filter text if html tags are not presence,so perform a regex // to test for html tags. if( content && (/<[^<]+?>/).test(content) ) { var isLazyLoad = loadRules( function(){ if( isLazyLoad ) { editor.fire('paste',data); } else { data[ 'html' ] = CKEDITOR.cleanWord( content,editor ); // Reset property or if user tries to paste again,it won't work editor.pasteFromWordHappened = 0; } }); isLazyLoad && evt.cancel(); } }); });