CKEditor + IE7 + 8'null或不是对象'错误

时间:2010-08-19 04:38:31

标签: javascript jquery dom ckeditor

我的问题是我正在为jQuery使用CKEditor 3.4插件,并且在编辑器上执行$(selector).val(html)调用时,它在IE 7 + 8中给出了一个错误:

错误: 'this。$。innerHTML'为null或不是对象

...当在调试器中运行时,指向巨大的CKEditor.js中的这行代码:

getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;}

...在源代码中转换为:

getHtml : function()
{
    var retval = this.$.innerHTML;
    // Strip <?xml:namespace> tags in IE. (#3341).
    return CKEDITOR.env.ie ? retval.replace( /<\?[^>]*>/g, '' ) : retval;
},

我的违规代码(剥离,但仍然给出错误):

var editor_data = $("textarea#body").val();
$("textarea#body").val(editor_data);

...以及后代的textarea代码:

<textarea name="body" rows="15" cols="50" class="wysiwyg" id="body"></textarea>

我已尝试在IE8中使用jsFiddle进行复制,但奇怪的是它在那里按预期工作。我也很乐意提供一份工作样本,但遗憾的是我不能出于我无法控制的原因。

我也尝试了这个修复程序,它清除了错误问题,但是之后setData没有按预期工作,只是覆盖了编辑器内容。我承认这个问题+修复有点过头了......:http://dev.ckeditor.com/ticket/4566

(对不起,很长的帖子:S)我也尝试将直接JavaScript API用于CKEditor(放弃jQuery集成),并且它也犯了同样的错误。

任何人都有任何他们希望我尝试解决这个问题的事情,或者对这可能是什么有所了解?非常感谢!

3 个答案:

答案 0 :(得分:3)

就我个人而言,我不喜欢修改源代码的现有答案,因为只要你更新ckEditor,你就必须记得再次修改源代码。我遇到了与原始海报相同的问题,发现了一个被认为是黑客的修复程序,但完全可用。简单地说,尝试/捕获使IE8中的一切都变得美好和快乐。现在在IE7中测试。此修复程序的另一个好处是,当您失败时,您不会留下空白数据,而是您获得了您尝试检索的实际内容。

var editor = $('textarea.editor').ckeditorGet();
var vPageContent = "";
try{
    vPageContent = editor.getData();//function call fails here
} catch(err){
    vPageContent = editor.getData();//but will work here
}

答案 1 :(得分:1)

可能不是最佳解决方案,但请看一下: http://dev.ckeditor.com/ticket/4566

它声称要更换

getHtml:function(){var i=this.$.innerHTML;return c?i.replace(/<\?[^>]*>/g,''):i;},

getHtml:function(){return (this.$) ? this.$.innerHTML : "";},

将解决问题。

我并不是说这是正确的答案,但我今天遇到了同样的问题,而且(现在)似乎有效。

答案 2 :(得分:1)

小心额外的逗号。 IE不喜欢exra逗号。您可以使用json lint

检查代码中是否有额外的逗号