Кто-нибудь знает, как отключить контекстное меню CKEditor (щелчок правой кнопкой мыши)? Я бы ожидал вариант конфигурации, но я не могу его найти. Я использую v3.1. Спасибо.
Как отключить контекстное меню CKEditor?
Ответы (12)
Вам нужно удалить плагин contextmenu
. См. здесь для версии 3.1.
Начиная с версии 3.6.4, другие ответы на этот вопрос больше не работают. см. ошибку № 9284.
Три плагина, которые необходимо отключить (используя средства, обсуждаемые в этом вопросе), это contextmenu
, liststyle
и tabletools
. Так, например, с помощью файлов конфигурации:
CKEDITOR.editorConfig = function(config) {
/* Your config options */
...
config.removePlugins = 'contextmenu,liststyle,tabletools';
};
Редактор 4.7.1
CKEDITOR.editorConfig = function (config) {
config.language = 'en';
config.toolbar = "mini";
config.removePlugins = 'elementspath,contextmenu,liststyle,tabletools,tableselection';
config.disableNativeSpellChecker = false;
}
Ckeditor 4.8.0
(плагин elementpath больше не нужно удалять)
CKEDITOR.editorConfig = function (config) {
config.language = 'en';
config.toolbar = "mini";
config.removePlugins = 'contextmenu,liststyle,tabletools,tableselection';
config.disableNativeSpellChecker = false;
}
Существует еще практическое решение путем переопределения функции-прототипа, которая инициализирует поведение contextmenu
:
CKEDITOR.dom.element.prototype.disableContextMenu = function () {
this.on( 'contextmenu', function( event ) {
// your contextmenu behavior
});
};
ПРИМЕЧАНИЕ: когда CKEDITOR динамически загружает свои JS-ресурсы, вам нужно поместить его прямо перед вызовом replace
.
Мне нужно было отключить все следующее, чтобы заставить это работать.
config.removePlugins = 'language,tableresize,liststyle,tabletools,scayt,menubutton,contextmenu';
Раньше нам не требовался ни язык, ни размер таблицы, но в более новой версии ckeditor это требуется.
Я обнаружил это, просматривая вывод инструментов разработчика F12 в хроме.
Вы можете узнать, какие плагины требуют contextmenu
в вашей конкретной сборке CKEditor, используя следующий фрагмент в окне консоли F12 на вашем сайте (предполагается, что у вас также есть jQuery для $.each
):
$.each(CKEDITOR.plugins, function(k, v){
v.requires && console.log("Plugin '" + k + "' requires: " + v.requires)
})
Например:
Для плагина tabletools требуется таблица, диалоговое окно, контекстное меню.
Который вы затем можете использовать, чтобы помочь вам с вашим config.removePlugins
- в моем случае:
config.removePlugins = 'tabletools,contextmenu'
Для версии 4.2 я добавил следующее в конец файла config.js.
CKEDITOR.on('instanceReady', function(ev) {
ev.editor.editable().addClass('cke_enable_context_menu')
});
Удерживая нажатой кнопку Ctrl, щелкните правой кнопкой мыши, чтобы обойти контекстное меню и получить доступ к проверке орфографии и т. д.
С CKEditor 3.6 я смог отключить контекстное меню, удалив плагин contextmenu, как было предложено выше. Для этого вам нужно настроить редактор с помощью опции removePlugins. Например:
CKEDITOR.replace('my_editor', {
removePlugins : 'contextmenu'
});
Его также можно отключить глобально из файла config.js:
CKEDITOR.editorConfig = function(config) {
/* Your config options */
...
config.removePlugins = 'contextmenu';
};
К сожалению, начиная с CKEditor 3.6/4.0 это больше не работает.
См. отчет об ошибке: http://dev.ckeditor.com/ticket/9284.
В CKEditor 4.x (я тестировал 4.2.2) вы должны сделать оба:
CKEDITOR.replace('my_editor', {
removePlugins : 'contextmenu'
});
И
CKEDITOR.editorConfig = function(config) {
/* Your config options */
...
config.removePlugins = ''liststyle,tabletools,contextmenu'';
};
Все три из них автоматически потребуют контекстного меню, если вы их не отключите.
CKEDITOR.replace('my_editor', { removePlugins : 'liststyle,tabletools,contextmenu' });
поможет
- person Wiktor Walc; 03.01.2014
Можно полностью отключить контекстное меню, добавив эту строку в ваш файл конфигурации (обычно fckconfig.js):
FCKConfig.ContextMenu = [];