Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript CK编辑器-未捕获类型错误:无法读取属性';clearCustomData';Chrome中的空值_Javascript_Jquery_Google Chrome_Ckeditor - Fatal编程技术网

Javascript CK编辑器-未捕获类型错误:无法读取属性';clearCustomData';Chrome中的空值

Javascript CK编辑器-未捕获类型错误:无法读取属性';clearCustomData';Chrome中的空值,javascript,jquery,google-chrome,ckeditor,Javascript,Jquery,Google Chrome,Ckeditor,我在应用程序中使用CK富文本编辑器。我有一个模式弹出窗口,其中我有三个选项卡-每个选项卡呈现相同的局部视图,其中我有一个字段调用描述,这是我使用CK Editor的部分视图。当我使用IE 11时,一切都按预期工作,选项卡加载时,文本区域变成CK编辑器框,每次文本区域保持为富文本编辑器时,都在选项卡之间导航。然而,当我第一次打开模式框时,我在Chrome中看到了奇怪的行为,每个选项卡上的描述文本区域如预期的那样变成了ck编辑器,当我在它们之间创建选项卡时,每个选项卡都是正确的文本区域。但是在Chr

我在应用程序中使用CK富文本编辑器。我有一个模式弹出窗口,其中我有三个选项卡-每个选项卡呈现相同的局部视图,其中我有一个字段调用描述,这是我使用CK Editor的部分视图。当我使用IE 11时,一切都按预期工作,选项卡加载时,文本区域变成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>

@LabelFor(model=>model.Description)
@Html.TextAreaFor(model=>model.Description)

我已经在CKEditor 4.4.4中找到了解决方案

在ckeditor.js(缩小)中,第784行:

a.clearCustomData();
(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()
应改为:

if (a) {a.clearCustomData();}
if (a){(d=a.removeCustomData("onResize"));if (d){d.removeListener();}a.remove()}
第784行:

a.clearCustomData();
(d=a.removeCustomData("onResize"))&&d.removeListener();a.remove()
应改为:

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

这似乎为我解决了问题,我还将向ckeditor提交一份错误报告,以便他们也能解决问题。

使用此代码销毁CK编辑器:

 try {
     CKEDITOR.instances['textareaid'].destroy(true);
 } catch (e) { }
 CKEDITOR.replace('textareaid');
修复程序位于ckEditor中,它将在调用clearCustomData之前检查iframe是否存在。发生这种情况的原因是,当模态关闭时,iframe将在您能够调用编辑器实例上的destroy之前被删除


Try/catch是目前最好的解决方法。

我同意您的看法,这可能是一种临时解决方案。我唯一想知道的是为什么
a
在这种特殊情况下为空。除非您确切知道
a
代表什么,否则此解决方案不是一个干净的解决方案。我完全同意,我的解决方案实际上只是一个让事情正常运行的黑客程序,我正在为ckeditor支持提供一个示例以供查看。有没有具体的解决方案?他们在CK5中修好了吗?@ScorpionKing2k5我不确定这是否在CK5中修好了。你能提供一把小提琴吗?为什么要使用
if(editor){editor.destroy(true);}
?我想这就是为什么
a
为空(在精简版
a==editor实例
)的原因。你应该对你的答案进行重新评分-该链接可能有一天会被删除。