我在Firefox中遇到了fckeditor的麻烦。当用户转到页面时,html(编码)存储在隐藏的输入元素中。我调用预定义的fckeditor javascript事件,用隐藏的ContentBody元素中的html填充我的编辑器。
function FCKeditor_OnComplete( editorInstance )
{
editorInstance.InsertHtml("");
var sample = document.getElementById("ContentBody").value;
editorInstance.InsertHtml(sample);
}
这会自动在IE中使用所需的文本填充编辑器,但在Firefox中却没有。 Firebug给了我错误:
A为null [中断此错误] var FCKW3CRange =函数(A){this._Docume ... eateFromRange(this._Document,这一点);}}; \ r \ n
使用Firebug我可以确定在使用Firefox时不会触发事件方法FCKeditor_OnComplete()。然而,它在IE中。关于如何在两种浏览器中使用它的任何想法?
ContentBody的HTML是:
<input type="hidden" name="ContentBody" id="ContentBody" value="<%=Model.Article%>" />
答案 0 :(得分:1)
这很有趣。我从来没有使用FCKeditorOnComplete(我必须删除下划线才能让WMD开心),但它看起来像是一个很好的钩子。您是否试图在下面的FCKEditor函数中设置一个断点?你带着Firefox到那儿了吗?也许这与你的FCKeditorOnComplete在物理上的位置有关......
function WaitForActive( editorInstance, newStatus )
267...{
268 if ( newStatus == FCK_STATUS_ACTIVE )
269 ...{
270 if ( FCKBrowserInfo.IsGecko )
271 FCKTools.RunFunction( window.onresize ) ;
272
273 _AttachFormSubmitToAPI() ;
274
275 FCK.SetStatus( FCK_STATUS_COMPLETE ) ;
276
277 // Call the special "FCKeditor_OnComplete" function that should be present in
278 // the HTML page where the editor is located.
279 if ( typeof( window.parent.FCKeditor_OnComplete ) == 'function' )
280 window.parent.FCKeditor_OnComplete( FCK ) ;
281 }
282}
答案 1 :(得分:0)
您确定您的代码的属性为id =“ContentBody”吗?可以使用属性name =“ContentBody”,IE将(技术上不正确)将其解释为getElementById的ID属性。只有正确使用id,Firefox才会找到它。
答案 2 :(得分:0)
如果你打破错误并向上走,那为什么A没有设置?或者,打破
document.getElementById("ContentBody").value
然后走下堆栈,寻找更具体的原因。
答案 3 :(得分:0)
上个月我在处理一个新项目时找到了解决方案。首先,我将编码的HTML字符串存储在隐藏的输入元素中:
<input type="hidden" name="ContentBody" id="ContentBody" value="<%=Model.Body%>" />
此函数是在完成加载时FCKeditor实例调用的事件。
function FCKeditor_OnComplete(editorInstance)
{
var oEditor = FCKeditorAPI.GetInstance(editorInstance.Name);
var content = parent.document.getElementById("ContentBody").value;
var EditedContent = content.replace(/\u201C/g, '"');
oEditor.InsertHtml(EditedContent);
content = null;
}
似乎Firefox需要javascript来调用parent.document.getElementById()