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

mmo*_*ar1 6 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;}
Run Code Online (Sandbox Code Playgroud)

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

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

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

var editor_data = $("textarea#body").val();
$("textarea#body").val(editor_data);
Run Code Online (Sandbox Code Playgroud)

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

<textarea name="body" rows="15" cols="50" class="wysiwyg" id="body"></textarea>
Run Code Online (Sandbox Code Playgroud)

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

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

(对不起,很长的帖子:S)我也尝试将直接JavaScript API用于CKEditor(放弃jQuery集成),并抛出相同的错误.

任何人都有他们想要我试图解决这个问题的任何东西,或者对它可能有什么预感?非常感谢!

小智 3

就我个人而言,我不喜欢包含修改源代码的现有答案,因为一旦您更新 ckEditor,您就必须记住再次修改源代码。我遇到了与原始海报相同的问题,并找到了一个被认为是黑客攻击但完全可用的修复程序。简单地说,Try/Catch 让 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
}
Run Code Online (Sandbox Code Playgroud)