.
FCKeditor跟使用的TinyMCE WordPress的一样,都是开源的WYSIWYG编辑器(所见即所得编辑器) ,一直以来比较习惯用FCKeditor这套编辑器来帮网页加入可以编辑的HTML的功能,但今天突然发现如果一个页面有两个FCKeditor且在 Firefox的运行时,若要使用FCKeditorAPI.GetInstance ( )来取得编辑器的实例,只有第一个可以正确取得,第二个将会是未定义的,第三个以上没试但应该也难逃厄运了。
运行环境:
- Firefox 3.0.1
- FCKeditor 2.6.3
发生错误可能原因:
- fckeditorcode_gecko.js 有Bug
- Firefox有Bug或与FCKeditor有小部份冲突
解決概念:
如果是第一个原因,我实在没兴趣把压缩过的 fckeditorcode_gecko.js解回来检查(压缩过都还有253K啊! ) ,更别说有缺陷的Firefox能帮上什么忙了,不过幸好在FCKeditor JavaScript的空气污染指数有提到,可以建立一个名为FCKeditor_OnComplete的回调函数,当FCKeditor载入完毕后将会 呼叫这个函数并传入一个参数,这个参数就是目前装载完毕的FCKeditor例如,只要把这个参数记录下来,就可以直接使用例如,不需要用 FCKeditorAPI.GetInstance ( )来取得,这样一来便解决问题了。
解決方式:
在FCKeditor载入之前加入以下JavaScript
-
//修正FckEditor错误
-
var __fckEditorInstance_ = new Array();//用来储存FCKeditor Instance的阵列
-
function FCKeditor_OnComplete( editorInstance )
-
{
-
__fckEditorInstance_[editorInstance.Name] = editorInstance;
-
}
-
function getFckInst(idname)
-
{
-
return __fckEditorInstance_[idname];
-
}
之后就可以利用getFckInst()來代替FCKeditorAPI.GetInstance()取得FCKeditor Instance