0

我在 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 为空 [中断此错误] var FCKW3CRange=function(A){this._Docume...eateFromRange(this._Document,this);}};\r\n

使用 Firebug,我可以确定事件方法 FCKeditor_OnComplete() 在使用 Firefox 时没有被触发。但是,它是在 IE 中。关于如何让它在两个浏览器中工作的任何想法?

ContentBody 的 HTML 是: <input type="hidden" name="ContentBody" id="ContentBody" value="<%=Model.Article%>" />

4

4 回答 4

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}
于 2009-08-05T19:37:30.420 回答
0

如果你打破错误并向上堆栈,为什么没有设置 A?或者,继续

document.getElementById("ContentBody").value

并沿着堆栈走下去,寻找更具体的原因。

于 2009-08-03T23:38:13.413 回答
0

您确定您的标签具有属性 id="ContentBody" 吗?可以使用属性 name="ContentBody",并且 IE 将(技术上错误地)将其解释为 getElementById 的 ID 属性。如果您正确使用 id,Firefox 只会找到它。

于 2009-08-03T21:10:50.840 回答
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()

于 2010-03-26T13:51:56.487 回答