Как узнать, загружен ли CKEditor? Я просмотрел документы API, но мог найти только загруженное событие. Я хочу проверить, загружен ли CKEditor, потому что, если я загружу его во второй раз, мои текстовые поля исчезнут.
Как определить, загружен ли CKEditor?
Ответ 1
Событие loaded
не работает для меня. instanceReady
работал:
CKEDitor_loaded = false;
CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; });
Ответ 2
var waitCKEDITOR = setInterval(function() {
if (window.CKEDITOR) {
clearInterval(waitCKEDITOR);
//CKEDITOR.replace(...);
}
}, 100/*milli*/);
Ответ 3
Я просмотрел документы API, но мог найти только загруженное событие.
Я не знаю, существует ли для этого конкретное свойство - возможно! - но вы можете использовать загруженное событие для установки глобального флага. Это не очень приятно, но будет работать.
// At the top of the script
CKEDitor_loaded = false;
// then later
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; });
Вместо глобальной переменной вы также можете рассмотреть возможность установки чего-то внутри CKEDITOR
:
CKEDITOR.flag_loaded = true;
Это будет немного чище.
Ответ 4
Я знаю, что это очень старый пост, но в моих исследованиях он продолжал расти. Я динамически загружаю CKEditor
через jQuery
. Я не хотел загружать его несколько раз, так как все начинает происходить, как вы узнали.
Простое решение:
if (!window.CKEDITOR) {
// (not loaded yet, your code to load it)
}
Ответ 5
Надеюсь, это поможет кому-то.
Я также загружаю фрагмент страницы с помощью функций CKEDITOR через AJAX, и поэтому я столкнулся со многими проблемами, изложенными в этом вопросе. Это мое решение:
function setCk(id){
if(window.CKEDITOR){
var _instId = CKEDITOR.instances[id];
if(_instId == undefined){
CKEDITOR.inline(id);
}else{
CKEDITOR.instances[id].destroy();
CKEDITOR.inline(id);
}
}
}
В каждом ответе AJAX для этого фрагмента я вставляю элемент script в голову с вызовом setCk (textareaId). Хитрость заключается в том, чтобы уничтожить все предыдущие экземпляры CKEDITOR для идентификатора цели и повторно инициализировать CKEDITOR после каждой загрузки фрагмента AJAX.
Ответ 6
//creating instance of ck-editor
var yourInstance = CKEDITOR.instances.yourContainer;
//check instance of your ck-editor
if(yourInstance){
//destroy instance
yourInstance .destroy(true);
}
// create instance again
CKEDITOR.replace( 'yourContainer' );
Ответ 7
Если экземпляр не готов, текстовый набор будет отброшен
При инициализации CkEditor (версия 4 здесь) вы никогда не должны устанавливать какие-либо данные, прежде чем редактор будет готов их обработать.
// Initialize this._editor with replace
if (this._editor.status !== "ready") {
this._editor.on("instanceReady",
event => {
event.editor.setData(data);
});
} else {
this._editor.setData(data);
}