CK编辑器 - 未捕获的TypeError:无法读取属性' clearCustomData'在Chrome中为null

时间:2014-07-30 10:10:33

标签: javascript jquery google-chrome ckeditor

我在我的应用程序中使用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>

3 个答案:

答案 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是目前最好的解决方法。