Как отключить контекстное меню CKEditor?

Кто-нибудь знает, как отключить контекстное меню CKEditor (щелчок правой кнопкой мыши)? Я бы ожидал вариант конфигурации, но я не могу его найти. Я использую v3.1. Спасибо.


person Upperstage    schedule 11.02.2010    source источник


Ответы (12)


Вам нужно удалить плагин contextmenu. См. здесь для версии 3.1.

person Pekka    schedule 11.02.2010
comment
Не работает в версии 3.1: dev.fckeditor. сеть/браузер/CKEditor/магистраль/_источник/плагины/меню/ - person Upperstage; 11.02.2010
comment
@Upper Stage: А, понятно, дерьмо. - person Pekka; 11.02.2010
comment
@Upper Stage, спасибо, что сообщили мне об этом. Теперь точно пропущу 3.1. - person Pekka; 11.02.2010
comment
Было бы упущением, если бы я не заметил, что 3.1 устраняет некоторые проблемы фокус в ckeditor"> stackoverflow.com/questions/2028599/ - person Upperstage; 11.02.2010

Начиная с версии 3.6.4, другие ответы на этот вопрос больше не работают. см. ошибку № 9284.

Три плагина, которые необходимо отключить (используя средства, обсуждаемые в этом вопросе), это contextmenu, liststyle и tabletools. Так, например, с помощью файлов конфигурации:

CKEDITOR.editorConfig = function(config) {
    /* Your config options */
    ...
    config.removePlugins = 'contextmenu,liststyle,tabletools';
};
person Alex Turpin    schedule 31.08.2012

Редактор 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;
}
person rusllonrails    schedule 31.07.2017
comment
Это сработало! Для 4.8.0 elementspath не нужно было удалять. - person Lucio; 19.12.2017

Существует еще практическое решение путем переопределения функции-прототипа, которая инициализирует поведение contextmenu:

CKEDITOR.dom.element.prototype.disableContextMenu = function () {
    this.on( 'contextmenu', function( event ) {
        // your contextmenu behavior
    });
};

ПРИМЕЧАНИЕ: когда CKEDITOR динамически загружает свои JS-ресурсы, вам нужно поместить его прямо перед вызовом replace.

person I.G. Pascual    schedule 12.11.2014
comment
Это сработало для нас. Мы только что использовали пустую функцию для disableContextMenu. - person benkiefer; 05.05.2015

Мне нужно было отключить все следующее, чтобы заставить это работать.

config.removePlugins = 'language,tableresize,liststyle,tabletools,scayt,menubutton,contextmenu';

Раньше нам не требовался ни язык, ни размер таблицы, но в более новой версии ckeditor это требуется.

Я обнаружил это, просматривая вывод инструментов разработчика F12 в хроме.

person Tim    schedule 31.07.2014

Вы можете узнать, какие плагины требуют 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'
person Duncan Smart    schedule 17.12.2014
comment
DIY всегда лучший вид ответов! Ваше здоровье - person Benj; 19.08.2015

Для версии 4.2 я добавил следующее в конец файла config.js.

CKEDITOR.on('instanceReady', function(ev) {
   ev.editor.editable().addClass('cke_enable_context_menu')
});
person user1337053    schedule 02.08.2013
comment
Спасибо, похоже, это единственный способ, так как их баги сохраняются. - person Kevin; 07.11.2013

Удерживая нажатой кнопку Ctrl, щелкните правой кнопкой мыши, чтобы обойти контекстное меню и получить доступ к проверке орфографии и т. д.

person Andy    schedule 01.06.2018
comment
Благодарю вас! Я пытался получить доступ к Инспектору браузера (не хотел менять настройки конфигурации). Часть панели инструментов, которую я пытался проверить, находилась в содержимом раскрывающегося списка на панели инструментов, и, хотя Ctrl + правый щелчок не работал для этого, это натолкнуло меня на мысль попробовать Shift + правый щелчок, что действительно сработало. - person Max Starkenburg; 05.05.2020

С CKEditor 3.6 я смог отключить контекстное меню, удалив плагин contextmenu, как было предложено выше. Для этого вам нужно настроить редактор с помощью опции removePlugins. Например:

CKEDITOR.replace('my_editor', {
    removePlugins : 'contextmenu'
});

Его также можно отключить глобально из файла config.js:

CKEDITOR.editorConfig = function(config) {
    /* Your config options */
    ...
    config.removePlugins = 'contextmenu';
};
person Jonathan Pasquier    schedule 26.06.2012

К сожалению, начиная с CKEditor 3.6/4.0 это больше не работает.

См. отчет об ошибке: http://dev.ckeditor.com/ticket/9284.

person Avatar    schedule 18.09.2012
comment
Разве это не то, что сказал Xeon06, и он также предоставил новую конфигурацию? - person AlfonsoML; 18.09.2012
comment
да, я читал и пробовал, у меня тоже не работает (последняя стабильная версия 3.6.4). - person Avatar; 20.09.2012
comment
Когда я перехватываю событие вставки: ev.editor.on('paste', function(evt) { ... }, я думал, что это помешает предоставленному решению. Однако после удаления этого я все еще получаю контекстное меню ckeditor. Это мой текущий config.js - person Avatar; 20.09.2012

В CKEditor 4.x (я тестировал 4.2.2) вы должны сделать оба:

CKEDITOR.replace('my_editor', { removePlugins : 'contextmenu' });

И

CKEDITOR.editorConfig = function(config) {
/* Your config options */
...
config.removePlugins = ''liststyle,tabletools,contextmenu'';
};

Все три из них автоматически потребуют контекстного меню, если вы их не отключите.

person sheldonkreger    schedule 26.11.2013
comment
На самом деле, вам не нужно делать и то, и другое. Во встроенной конфигурации вы отключили только один плагин (контекстное меню), поэтому он не работал. CKEDITOR.replace('my_editor', { removePlugins : 'liststyle,tabletools,contextmenu' }); поможет - person Wiktor Walc; 03.01.2014

Можно полностью отключить контекстное меню, добавив эту строку в ваш файл конфигурации (обычно fckconfig.js):

FCKConfig.ContextMenu = [];
person Anand Mishra    schedule 23.05.2014