在 CKEditor 4 的源代码模式下,如何禁用预览按钮?

How can I disable the Preview button while in Source Mode with CKEditor 4?

我们使用的是 nuget 提供的最新版 CKEditor(完整版)4.7.3。我们已经尝试了一些建议的解决方案来在源代码模式下禁用预览工具栏按钮,但无法使其工作。有时页面上有多个编辑器,由于一些不相关的逻辑,它们被添加为用户控件 (.ascx)。例如,我们尝试了以下:

CKEDITOR.on('instanceReady', function (instance) {
    instance.editor.addCommand('preview', {
        modes: { wysiwyg: 1, source: 0 }
    });
});

我们通过 config.js 配置工具栏按钮。

CKEDITOR.editorConfig = function (config) {
    config.toolbar_CMToolbar =
        [
            { name: 'sourcedialog', items: ['Source', '-', 'Preview'] }
        ];
};

我们需要这个的原因是为了避免在源模式下添加恶意脚本并立即请求预览时导致 javascript 执行的安全问题。通常所见即所得模式会清除它并且恶意脚本会被验证。

下面是触发问题的示例脚本,供参考。 (包括从双引号到标记关闭的所有内容)

"><img src=x onerror=alert(7)>

虽然这只是在回避主要问题而不是修复它,但这种解决方法会处理得更快。

希望听到有关如何更正此问题的建议。谢谢!

您可以像这样更改命令的属性:

CKEDITOR.on('instanceReady', function(evt) {                
    evt.editor.commands.preview.modes.source = 0;
});