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