我的问题是我正在为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集成),并且它也犯了同样的错误。
任何人都有任何他们希望我尝试解决这个问题的事情,或者对这可能是什么有所了解?非常感谢!
答案 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)