我在我的应用程序中使用CK Rich Text Editor。我有一个模态弹出窗口,在其中我有三个选项卡 - 每个选项卡呈现相同的局部视图,其中我有一个字段调用描述这是我使用CK编辑器。当我使用IE 11时,一切都按预期工作,Tabs加载Textarea变成CK编辑框,每次文本区域保持为富文本编辑器时在标签之间导航。但是,当我第一次打开模式框时,我看到Chrome中的奇怪行为,每个选项卡上的描述文本区域都按预期变成了ck编辑器,而我在它们之间的选项卡中每个选项卡都是正确的文本区域。但是在Chrome中,如果我关闭模态框并重新启动,我会在控制台中收到上述错误?如果我打开模态框并在选项卡之间导航6次,我会出现相同的错误,然后丢失文本区域的功能,作为CK富文本编辑器。有没有人有类似的东西或有可能的解决方案。
我的js文件中的代码如下:
$(document).ready(function () {
var editor = CKEDITOR.instances['Description'];
if (editor) { editor.destroy(true); }
CKEDITOR.replaceAll();
});
在3个选项卡中呈现的局部视图中的cshtml标记如下:
<div class="row">
@Html.LabelFor(model => model.Description)
<div class="col-md-10">
@Html.TextAreaFor(model => model.Description)
</div>
</div>
答案 0 :(得分:9)
使用此代码销毁CK编辑器:
try {
CKEDITOR.instances['textareaid'].destroy(true);
} catch (e) { }
CKEDITOR.replace('textareaid');
答案 1 :(得分:6)
我已经能够在CKEditor 4.4.4中找到解决方案。
在ckeditor.js(缩小)中,第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提交一份错误报告,以便他们也可以修复它。
答案 2 :(得分:3)
此修复程序位于ckEditor中的https://github.com/ckeditor/ckeditor-dev/pull/200,它将在调用clearCustomData之前检查是否存在iframe。它发生的原因是当模态关闭时iframe被移除,然后才能在编辑器实例上调用destroy。
Try / catch是目前最好的解决方法。