1

我想为 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)。但我不知道如何重新阅读或设置它。


我读到更改配置值的一种可能性是通过在运行时替换它来重新初始化整个编辑器......但必须有另一种解决方案!?

PS:我在这里读到您可以使用以下内容,但这对我不起作用:

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

1 回答 1

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';
});
于 2012-08-26T23:53:23.493 回答