Как определить, загружен ли CKEditor? - PullRequest
20 голосов
/ 10 августа 2010

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

Ответы [ 7 ]

26 голосов
/ 25 ноября 2011

Событие loaded не сработало для меня.instanceReady работал:

CKEDitor_loaded = false;

CKEDITOR.on('instanceReady', function(){ CKEditor_loaded = true; }); 
3 голосов
/ 28 мая 2015
var waitCKEDITOR = setInterval(function() {
    if (window.CKEDITOR) {
       clearInterval(waitCKEDITOR);
       //CKEDITOR.replace(...);
    }
}, 100/*milli*/);
1 голос
/ 10 августа 2010

Я просмотрел документы API, но смог найти только загруженное событие.

Я не знаю, существует ли конкретное свойство для этого - возможно! - но вы можете использовать загруженное событие, чтобы установить глобальный флаг. Это не очень хорошо, но сделаю работу.

// At the top of the script
CKEDitor_loaded = false;

// then later
CKEDITOR.on('loaded', function(){ CKEditor_loaded = true; });

Вместо глобальной переменной вы также можете установить что-то внутри CKEDITOR:

CKEDITOR.flag_loaded = true;

Это было бы немного чище.

0 голосов
/ 15 мая 2019

Если экземпляр не готов, текстовый набор будет отброшен

При инициализации 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);
}
0 голосов
/ 01 октября 2018
//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' );
0 голосов
/ 11 октября 2016

Надеюсь, это кому-нибудь поможет.

Я также загружаю фрагмент страницы с функциональностью 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.

0 голосов
/ 08 октября 2014

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

Простое решение:

if (!window.CKEDITOR) {
    // (not loaded yet, your code to load it)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...