CKEditor在从Microsoft Word复制和粘贴时剥离标记。我怎样才能诊断出这种情况的原因?

时间:2017-07-14 21:00:56

标签: javascript ckeditor

我的任务是解决公司CMS的问题。我们使用CKEditor。当用户从Microsoft Word切换并粘贴到编辑器中时,标签将被删除。这是由不再在公司工作的人故意完成的,现在我们想要允许a个标签。

我可以通过进入javascript控制台找到编辑器。当我检查对象时,我发现editor.config.allowedContent设置为"p[*](*){*}; h1[*](*){*}; h2[*](*){*}; em; b; u; ul[*](*){*}; ol[*](*){*}; li[*](*){*}; img[*](*){*}; iframe[*](*){*}; a[*](*){*}; object[*](*){*}; param[*](*){*}; embed[*](*){*}; video[*](*){*}; i; table[*](*){*}; tr[*](*){*}; td[*](*){*}; script[*](*){*}; h3[*](*){*}; span[*](*){*}; br[*](*){*}; div[*](*){*}; strong; blockquote[*](*){*},其中包含一个标记。

在复制+粘贴时剥离链接标记还有什么其他可能的原因?

谢谢!

编辑:

这是config.js:

CKEDITOR.editorConfig = function( config ) {

config.toolbarGroups = [
    { name: 'clipboard',   groups: [ 'clipboard', 'undo' ] },
    { name: 'editing',     groups: [ 'find', 'selection', 'spellchecker' ] },
    { name: 'links' },
    { name: 'insert' },
    { name: 'forms' },
    { name: 'tools' },
    { name: 'document',    groups: [ 'mode', 'document', 'doctools' ] },
    { name: 'others' },
    '/',
    { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },
    { name: 'paragraph',   groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },
    { name: 'styles' },
    { name: 'colors' },
    { name: 'about' }
];


config.removeButtons = 'Underline,Subscript,Superscript';

config.format_tags = 'p;h1;h2;h3;pre';

config.removeDialogTabs = 'image:advanced;link:advanced';

config.fillEmptyBlocks = false;
config.baseFloatZIndex = 100001;

config.extraAllowedContent = 'a';

};
CKEDITOR.config.fillEmptyBlocks = false;

此外,似乎有些配置选项是动态设置的:

this.editorObject = CKEDITOR.inline(this.$editable[0],{
            forcePasteAsPlainText: true,
            title: this.label,
            customConfig: '',
            removePlugins: 'autocorrect,format,stylescombo',
            removeButtons: 'PasteText,Flash,Anchor,ShowBlocks,About',
            extraPlugins: extraPlugins,
            linkShowAdvancedTab: false,
            linkShowTargetTab: true,
            youtube_responsive: true,
            youtube_related: false,
            scayt_autoStartup: true,
            readOnly: this.disabled,
            floatSpacePinnedOffsetY: 100,
            floatSpaceDockedOffsetY: 25,
            toolbar: this.toolbarDefinitions[this.variant],
            allowedContent: allowedContent,
            blockedKeystrokes: blockedKeystrokes,
            keystrokes: keystrokes,
            on: {
                instanceReady: _.bind(function(e) {
                    if (this.fieldname == 'inc_clean_text' && this.area) {
                        this.area.generateInlineVideoPlayers();
                        var area = this.area;
                        async.nextTick(function() {
                            _.each(area.inlineVideoPlayers, function(player) {
                                player.menu && player.menu.show();
                            });
                        });
                    }

                    this.$editable.focus();

                    // When triggerred will focus on the editor.
                    this.$editable.on('focusCursor', (function() {
                        var range = this.editorObject.createRange();
                        range.moveToElementEditablePosition(this.editorObject.editable(), true);
                        this.editorObject.getSelection().selectRanges([range]);
                    }).bind(this));

                    if (this.editorObject.document.$.getElementById('caret-position-placeholder')) {
                        // When there is a caret placeholer present will put the cursor there and
                        // remove the placeholder element.
                        var node = new CKEDITOR.dom.element(this.editorObject.document.$.getElementById('caret-position-placeholder'));
                        var range = new CKEDITOR.dom.range(this.editorObject.document);
                        range.selectNodeContents(node);
                        this.editorObject.getSelection().selectRanges([range]);
                        $(this.editorObject.document.$.getElementById('caret-position-placeholder')).remove();
                    }

                    if (this.$editable.hasClass('pancaption_override')) {
                        // ! TODO Move elsewhere.
                        // Code specific to the main feature image caption editor.
                        if (this.$editable.data('reshow')) {
                            this.$editable.data('reshow', false);
                            $('.pancaption_default').hide();
                            this.$editable.attr('contenteditable', true);
                            this.$editable.show().focus().trigger('click');
                            this.editorObject.setReadOnly(this.disabled);
                        }
                        if (this.$editable.html() == '') this.$editable.trigger('focusCursor');
                    }

                    // When on the new article page and clicking on a field with default text then empty
                    // the editable text.

                    //this.editorObject.setData('');
                    //this.$editable.trigger('focusCursor');
                    //this.$editable.toggleClass('empty', true);
                }, this),

                change: _.bind(this.contentChanged, this)
            }
        });

请告诉我是否应该追踪这些变量。

1 个答案:

答案 0 :(得分:0)

通过通常位于CKEditor目录根目录的config.js文件来控制允许或禁止哪些标记。 http://docs.ckeditor.com/#!/guide/dev_configuration

正如您通过控制台发现的那样,您可以分别通过config.allowContentconfig.disallowedContent允许或禁止某些代码。 http://docs.ckeditor.com/#!/guide/dev_acf