Ответ 1
используйте этот код для уничтожения редактора CK:
try {
CKEDITOR.instances['textareaid'].destroy(true);
} catch (e) { }
CKEDITOR.replace('textareaid');
Я использую 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>
используйте этот код для уничтожения редактора CK:
try {
CKEDITOR.instances['textareaid'].destroy(true);
} catch (e) { }
CKEDITOR.replace('textareaid');
Я смог найти решение для этого в 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, чтобы они могли исправить это.
Исправление здесь https://github.com/ckeditor/ckeditor-dev/pull/200 внутри ckEditor будет проверять наличие iframe перед вызовом clearCustomData. Причина, по которой это происходит для вас, заключается в том, что когда модальный закрывает iframe, удаляется, прежде чем вы сможете вызвать destroy в экземпляре редактора.
Try/catch - лучший способ обхода проблемы.