CK Editor - Uncaught TypeError: Не удается прочитать свойство clearCustomData из null в Chrome

Я использую CK Rich Text Editor в своем приложении. У меня модальное всплывающее окно, и внутри него у меня три вкладки - каждая из этих вкладок отображает тот же Partial View, в котором у меня есть полевой вызов Описание, которым я пользуюсь CK Editor. Когда я использую IE 11, все работает так, как ожидалось, и загрузка вкладок с Textarea превращается в окно редактора CK и перемещается между вкладками каждый раз, когда текстовая область остается в виде редактора Rich Text. Однако я вижу странное поведение в Chrome, когда я впервые открываю модальный блок, где текстовая область описания на каждой вкладке превращается в редактор ck, как и ожидалось, и когда я нахожу между ними, каждая из них правильно является текстовой областью. Однако в Chrome, если я закрою модальный блок и repoen, я получу ошибку выше в консоли? Если у меня модальный ящик открыт и перемещается между вкладками 6 раз, я получаю ту же самую ошибку, а затем теряю функциональность текстовых областей, которые выделяются как текстовые редакторы CK. Кто-нибудь имел что-то подобное или получил возможное решение.

Код в моем js файле выглядит так:

$(document).ready(function () {

    var editor = CKEDITOR.instances['Description'];
    if (editor) { editor.destroy(true); }
    CKEDITOR.replaceAll();

});

Разметка cshtml из частичного представления, отображаемого на 3 вкладках, выглядит следующим образом:

 <div class="row">
                @Html.LabelFor(model => model.Description)
                <div class="col-md-10">
                    @Html.TextAreaFor(model => model.Description)
                </div>
            </div>

Ответ 1

используйте этот код для уничтожения редактора CK:

 try {
     CKEDITOR.instances['textareaid'].destroy(true);
 } catch (e) { }
 CKEDITOR.replace('textareaid');

Ответ 2

Я смог найти решение для этого в CKEditor 4.4.4.

В ckeditor.js(minified) строка 784:

a.clearCustomData();

следует изменить на:

if (a) {a.clearCustomData();}

Также в строке 784:

(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()

следует изменить на:

if (a){(d=a.removeCustomData("onResize"));if (d){d.removeListener();}a.remove()}

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

Ответ 3

Исправление здесь https://github.com/ckeditor/ckeditor-dev/pull/200 внутри ckEditor будет проверять наличие iframe перед вызовом clearCustomData. Причина, по которой это происходит для вас, заключается в том, что когда модальный закрывает iframe, удаляется, прежде чем вы сможете вызвать destroy в экземпляре редактора.

Try/catch - лучший способ обхода проблемы.