CKEditor:在运行时从config.js更改值?

时间:2012-08-26 14:28:16

标签: jquery ckeditor config

我想为cKEditor的功能“forcePasteAsPlainText”切换一下,你可以在config.js中启用它:

CKEDITOR.editorConfig = function( config ) {
  config.forcePasteAsPlainText = true;
}


从我网站的js文件中,我现在尝试使用jquery更改forcePasteAsPlainText的值:

 if(typeof(CKEDITOR) !== 'undefined') { 
    $('#filterTextButton').click(function () {
        CKEDITOR.config.forcePasteAsPlainText = !CKEDITOR.config.forcePasteAsPlainText;
        if(CKEDITOR.config.forcePasteAsPlainText) {
            $("#filterSwitch").html("OFF");
        }
        else {
            $("#filterSwitch").html("ON");
        }
    });
}

问题是我无法访问 CKEDITOR.config.forcePasteAsPlainText 。我得到一个未定义的。

将对象 CKEDITOR.config 转换为字符串,我看到有一个名为 CKEDITOR.config.plugins 的对象,其中包含一个名为“pastetext”的参数(属于forcePasteAsPlainText)。但我不知道如何阅读或重新设置它。


我读到更改配置值的一种可能性是通过replacing it at runtime重新初始化整个编辑器......但是必须有另一种解决方案!?

PS:我read here您可以使用以下内容,但这对我不起作用:

CKEDITOR.on('instanceReady', function(ev) {
   ev.editor._.commands.paste = ev.editor._.commands.pastetext;
});

1 个答案:

答案 0 :(得分:1)

不幸的是,如果不重新初始化编辑器,就无法修改forcePasteAsPlaintext。您可以在此处http://dev.ckeditor.com/browser/CKEditor/trunk/_source/plugins/pastetext/plugin.js#L56查看此配置设置仅在启动时使用一次。

替代解决方案是手动关闭/打开强制粘贴作为纯文本。例如。像这样:

// Set to false to switch forcing off.
var force = true;

editor.on( 'beforeCommandExec', function ( evt )
{
     var mode = evt.data.commandData;
     if ( force && evt.data.name == 'paste' && mode != 'html' )
     {
         editor.execCommand( 'pastetext' );
         evt.cancel();
     }
}, null, null, 0 );

editor.on( 'beforePaste', function( evt )
{
    if ( force )
        evt.data.mode = 'text';
});