Подтвердить что ты не робот

Как определить, загружен ли CKEditor?

Как узнать, загружен ли CKEditor? Я просмотрел документы API, но мог найти только загруженное событие. Я хочу проверить, загружен ли CKEditor, потому что, если я загружу его во второй раз, мои текстовые поля исчезнут.

4b9b3361

Ответ 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);
}