fck的使用和修改(转自nickshen3的专栏)

javascript调用方式:
V�Y!r�Mt0------------------------------------
!x7oB%w}'Obj0<script. type=”text/javascript” src=”FCKeditor/fckeditor.js”></scrīpt>

<textarea name=”content” cols=”80″ rows=”4″>
"Ly,lz5_b`0</textarea>
s%B*m hG8|/eqz3}0<script. type=”text/javascript”>中天在线博客gz/l3BK@9B~$]BH
var FCKeditor = new FCKeditor(”content”);中天在线博客5n|&]9qfx%S+|P
oFCKeditor.BasePath = “FCKeditor/”;中天在线博客7_(R;L6t _Od
oFCKeditor.Height = 400;中天在线博客9[hS9/d
oFCKeditor.ToolbarSet = “Default”;
0Aq k k A0oFCKeditor.ReplaceTextarea();中天在线博客4Zn5ex ?&RN&@)u
</script>
O*|&Up$? _'j$I0------------------------------------

如果想要使用从数据库读来的文本数据或者是后台来自文件的txt/html文本数据。中天在线博客c7WK)U0Sc(K$q6a
只要在中天在线博客2}0m(X7m2e:@Z
------------------------------------
P6b4a*u._0<textarea name=”content” cols=”80″ rows=”4″>
0x Odn a ~&N0</textarea>中天在线博客+Y)n e E N ~5f]`
------------------------------------

中加入自己的显示内容的formbean对应字段即可
&O(Jb T [!ff` G0------------------------------------
5}~ W@Bgl-k1c0<textarea name=”content” cols=”80″ rows=”4″>
:O&aG0I._0    <c:out value=”${contentData}” />
`OF {(cV Qb)x0</textarea>中天在线博客1kk2VVFCm!q7{ w
------------------------------------

这样内容就会被显示在FCKeditor编辑框中了,点击提交按钮以后就可以在后台的相应java action中得到content参数中的内容就是页面上FCKeditor中的内容数据了。可以在struts/jsf中使用。

====================================

由 于给FCKeditor瘦身,所以常会报缺少对象支持等错误,只要在FCKeditor/editor/lang中加上相应的js语言文件即可。如果加载 页面失败(FCKeditor未定义)还有一个可能就是引用FCKeditor/fckeditor.js文件路径不对!

关于FCKeditor瘦身要点如下:
?4I'I_%R!j{01.将FCKeditor目录下及子目录下所有以“_”下划线开头的文件夹删除
L tt$E1T$d02.FCKeditor根目录下只保留fckconfig.js, fckeditor.js, fckstyles.xml, fcktemplates.xml,其余全部删除
}Z#ADzp2@03.将editor/filemanager/upload目录下文件及文件夹清空
2H5Yhpn iR04.将/editor/filemanager/browser/default/connectors/下的所有文件删除
_)_HRt/M%[05.还可以将editor/skins目录下的皮肤文件删除,只留下default一套皮肤(如果你不需要换皮肤的话)
.q3Pc)O1z_06.还可以将editor/lang目录下文件删除,只保留en.js, fcklanguagemanager.js, zh-cn.js, zh.js文件中天在线博客/6g9bs9^
7.如果你是使用javascrīpt来调用加载FCKeditor,那么就不需要在web.xml中配置fckeditor的tag文件。中天在线博客|&bF*ip(b~ t"j
8.还有一个问题刚开始使用FCKeditor的人常会遇到就怎么控制它的toolbar的大小和元素排列,其实很简单。中天在线博客 {bq}"iX5lb
在fckconfig.js中用这样的标签[]来划分每行的元素的多少,这样就可以控制toolbar的长短和大小了,具体示例参看:fckconfig.js中的toolbarset[”Default”]

====================================

用fckconfig.js中的一些选项来控制toolbarset中控件的功能,实现功能裁剪:中天在线博客g6n^og(s
1):取消超链接中的浏览服务器和上传功能,方法如下:中天在线博客1gA n/$V3oH7p1Dx~
------------------------------------
9nmQ/?2S;t!s&]2H)y/0FCKConfig.LinkBrowser = true;
_"h*{)D i0FCKConfig.LinkUpload = true;
es�_fcs0b0改为:中天在线博客3ip#n'T;p,n[
FCKConfig.LinkBrowser = false;中天在线博客b*[`1h p ZO
FCKConfig.LinkUpload = false;
K ] brV0------------------------------------

2):取消图片链接中的浏览服务器和上传功能,方法如下:
d7I(@"Z+l0------------------------------------中天在线博客/j})h E&|(V&K$j m
FCKConfig.ImageUpload = true;中天在线博客-d/o#gE0x
FCKConfig.ImageBrowser = true;
e'm$QH�{"x6i0改为:
d�A h"s;z0FCKConfig.ImageUpload = false;
oB#Yn |k1l8j&t[0FCKConfig.ImageBrowser = false;
Q%N;Hf Rk0------------------------------------

3):Dlg Button中取消高级功能,方法如下:
2t7uR s sQ _0FCKConfig.LinkDlgHideAdvanced = false ;
q+/f*S7VR.L|0FCKConfig.ImageDlgHideAdvanced = false ;中天在线博客NaS b&R9G
改为:
1~2RC$}B I0FCKConfig.ImageDlgHideAdvanced = true ;
~fM!J6R;QV9T1o {0FCKConfig.LinkDlgHideTarget = true ;
6vm a0//l0------------------------------------

下一篇介绍FCKeditor的上传和浏览服务器功能,以及如何在里面实现动态

超连接,转发到servlet经过filter以后去调用服务器的action

如何实现对应用户浏览自己的图片的列表实现!

====================================

FCKeditor集成java servlet可以实现文件的上传和服务器端列表读取功能FCKeditor自己提供了两个servlet来分别实现上传文件功能,和读取服务器端文件列表功能,这两个servlet分别为:
1o'i�Yh%t)Z8YA6S0com.fredck.FCKeditor.connector.ConnectorServlet(读取文件列表)
Aa$Med:^9f'E0com.fredck.FCKeditor.uploader.SimpleUploaderServlet(实现文件上传)

1.浏览服务器端文件列表中天在线博客,v iN0b P
------------------------------------中天在线博客f#_&P d:E
web.xml文件中,比如:ConnectorServlet中的配置选项:中天在线博客^.P X^-^ Gxg-R)Q
<init-param>
n/zjX?$L0    <param-name>baseDir</param-name>中天在线博客 DGM0H5S `.q!z,O ^b
    <param-value>/UserFiles/</param-value>中天在线博客E-w2RYIM#|w
</init-param>

意思是在浏览服务器上的baseDir配置指定里面的所有文件及其目录结构列表。
T8],C5f$LW0如果你的baseDir没有配置,Connector将会自动创建一个默认的文件夹
*@HtV^d`[0UserFiles,对应的ConnectorServlet中init()方法中代码如下:中天在线博客)O.vM jm-s{
------------------------------------
8^{ sM+~2w A0baseDir = getInitParameter(”baseDir”);中天在线博客#a$E-z'bpN8PK// ONJ-a
if (baseDir == null)中天在线博客f KP x$T ?N_,_
    baseDir = “/UserFiles/”;

------------------------------------中天在线博客&~(eES(dqD
还 想说一下的是,FCKeditor的client调用server的servlet方法采用的是Ajax思想来实现。当你点击浏览服务器(browser server)的时候就会触发一个异步的javascrīpt + xmlhttp的调用响应,后台的servlet会去完成你要请求的事件,然后数据以xml方式返回给client来解析。很明显,你要实现去数据库或者其他的文件系统请求列表,你只要修改中天在线博客#Qk"c} ^J
ConnectorServlet中两个私有方法:getFolders 和 getFiles

让 它去你指定的地方得到文件列表即可,这样你的文件可以放在任何你指定目录下。多说一句,很多人都想知道个人blog系统中怎么实现上传文件以后对应用户浏 览自己的列表的,我的做法很简单,建立你用户名的文件夹,你上传只能上传到你的目录夹,浏览可以通过程序指定浏览对应用户下的文件夹即可,这个时候你要修 改Connectorservlet中的路径即可!中天在线博客 ~{p'X/g4?K
------------------------------------

2.超连接重定位问题中天在线博客vny/(ZI!Z8N(FV fV
------------------------------------中天在线博客(l$n-T9D^ WYJC
FCKeditor 可以插入超连接,实现对文件的预览功能,只要我们稍微改变我们可以使FCKeditor编辑器支持对任意文件系统下的任意文件的客户端浏览和下载保存! FCKeditor本来提供的是相对URL超链接,只要我们修改ConnectorServlet中传递给客户端的地址的时候,把它改写成绝对URL然后 再通过我们自己的filter的servlet实现重定向去一个下载/浏览文件的struts的action方法就可以实现在客户端对超连接文件的下载和 浏览!说一下具体做法吧:

1):修改ConnectorServlet传递给客户端javascrīpt的路径,代码如下:中天在线博客5l/j*Ff:C3W
String currentUrl = “http://” + request.getserver +request.getServerPort + request.getContextPath + resourcePath;

以上代码请在ConnectorServlet的doGet()里面拼装!在调用CreateCommonXml()私有方法的时候参数传入:中天在线博客'z1D6u$l8C
myEl.setAttribute(”path”,currentPath);中天在线博客o(A u?k
myEl.setAttribute(”url”,currentUrl);

提醒一下resourcePath为在web.xml配置文件中ConnectorServlet中的一个初始化参数配置,等一下利用filter实现对超连接的重定位就提取URL中的这个配置参数来判断,配置如下:中天在线博客&[pc C aiJ1x4@
<init-param>
j4g4i2`v1u's0    <param-name>resourcePath</param-name>中天在线博客y_,O|8}/}
    <param-value>/fileSystem/</param-value>中天在线博客oyA:I G7{
</init-param>

2):建立你的filter servlet,实现对URL的截获,对符合要求的URL进行重定位到你的对应action中去即可中天在线博客dV*a2|)N [Vd(k
3):实现你的对应action来实现文件的上传和下载功能即可!中天在线博客2O1@9y@K ~+JkSKC L
4): 扩展功能-实现对URL的加密,对连接的URL中加上一串字符,最后几位作为算法校验,对不符合要求的URL连接,filter将会拒绝重定位到指定 action。此外利用自己写的扩展类还可以实现对超连接的文件类型进行限制,比如你只能超连接JPG|GIF|DOC|TXT|HTML等几种后缀名的 文件,对其他文件即使你指定超连接也让你浏览和下载,这些都可以在web.xml中通过修改对应servlet的配置文件的初始化参数实现。

3.页面javascrīpt修改
m3i Y2`"C3t0------------------------------------
+/"Wl2A#^3Z&JY0浏 览服务器的功能对应的html/javascrīpt相关的文件为:browser.html和frmresourcelist.html对应你想传递的 信息你可以append在文件名的字符串后面,在GetFileRowHtml()的javascrīpt函数中实现对文件名的截取,这样client只 会显示文件名,而你可以得到文件的数据库唯一标识,任何你想要的信息你都可以通过修改ConnectorServlet中的私有方法getFiles() 来实现,只要修改页面frmresurcelist.html中的GetFileRowHtml()中传入变量fileName即可。你还可以在点击选中 文件的时候实现一个你自己的Ajax调用,一切取决你的项目需要!

4.我不是一个javascrīpt高手,其实如果我对javascrīpt了解多一些也许对客户端的代码修改以后做出更眩的功能。可以更好的完成对FCKeditor裁剪。
Q2^^s�u}q~I0-------------------------------------

5.注意点
'FV!GF {0-------------------------------------中天在线博客7YC,Pz#h)A+O
无论怎么修改别人的东西,请一定尊重开源精神!
P N6yO(g7Ag0很 多人配置好了FCKeditor的上传功能以后常会遇到xmlhttp request 404 error,后面是一串路径,其实就是你的servlet-mapping中的路径不对,你只要把xmlhttp request errot 404 后面跟的路径,copy到你的web.xml中对应红色文字的位置,如下:中天在线博客'BO V*W;w vo
<servlet-mapping>
)i%d0Cre4O ^W0    <servlet-name>Connector</servlet-name>中天在线博客v%u8Ah,Y&l g
    <url-pattern>/FCKeditor/editor/filemanager/browser/default/connectors/jsp/connector</url-pattern>
(eN @N l0</servlet-mapping>

别忘了SimpleUploader的servlet-mapping也要做同样的修改!

还有一个错误就是http 500错误,这个可能是你的URL请求不对,应该和FCKeditor没关系的!

======================================

fckconfig.js总配置文件,可用记录本打开,修改后将文件存为utf-8 编码格式。找到:
5XS /6znj @:V0--------------------------------------
0|:@.B/Zi+}0FCKConfig.TabSpaces = 0;中天在线博客Nd b�s0M
改为:
n�kt GNc0FCKConfig.TabSpaces = 1;

即在编辑器域内可以使用Tab键。

如果你的编辑器还用在网站前台的话,比如说用于留言本或是日记回复时,那就不得不考虑安全了,中天在线博客9xZu2x[ U%o W
在前台千万不要使用Default的toolbar,要么自定义一下功能,要么就用系统已经定义好的Basic,中天在线博客 m0K-vunpU
也就是基本的toolbar,找到:
(a@T Y O0--------------------------------------
O4}P1AXozF|5C0FCKConfig.ToolbarSets[”Basic”] = [
*r"j!Zu X/P$ju1U0[’Bold’,'Italic’,'-’,'OrderedList’,'UnorderedList’,'-’,/*’Link’,*/’Unlink’,'-’,'Style’,'FontSize’,'TextColor’,'BGColor’,'-’,中天在线博客&[/?E:PJ g
‘Smiley’,'SpecialChar’,'Replace’,'Preview’] ];

这是改过的Basic,把图像功能去掉,把添加链接功能去掉,因为图像和链接和flash和图像按钮添加功能都能让前台页直接访问和上传文件, fckeditor还支持编辑域内的鼠标右键功能。

FCKConfig.ContextMenu = [’Generic’,/*’Link’,*/’Anchor’,/*’Image’,*/’Flash’,'Select’,'Textarea’,'Checkbox’,'Radio’,'TextField’,'HiddenField’,
,q;yf%N f/W0/*’ImageButton’,*/’Button’,'BulletedList’,'NumberedList’,'TableCell’,'Table’,'Form’];

这也是改过的把鼠标右键的“链接、图像,FLASH,图像按钮”功能都去掉。

找到:中天在线博客xuK s0{
FCKConfig.FontNames = ‘Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana’;

加上几种我们常用的字体

FCKConfig.FontNames = ‘宋体;黑体;隶书;楷体_GB2312;Arial;Comic Sans MS;Courier New;Tahoma;Times New Roman;Verdana’;

添加文件 /TestFCKeditor/test.jsp:中天在线博客yc2MSe7Is i,J;_"U
----------------------------------------中天在线博客(i3H.@#A+nYo O w`
<%@ page language=”java” import=”com.fredck.FCKeditor.*” %>中天在线博客 j#V)jm2|'LK+l
<%@ taglib uri=”/TestFCKeditor” prefix=”FCK” %>中天在线博客p5U-jk nI3xX#P
<script. type=”text/javascript” src=”/TestFCKeditor/FCKeditor/fckeditor.js”></script>

<%–中天在线博客 t{c}+S$`;g;@$Z
三种方法调用FCKeditor中天在线博客b']&fn5C8M&qN*s
1.FCKeditor自定义标签 (必须加头文件 <%@ taglib uri=”/TestFCKeditor” prefix=”FCK” %> )中天在线博客Tk2uE3k]6Xg%X;G
2.script脚本语言调用 (必须引用 脚本文件 <script. type=”text/javascript” src=”/TestFCKeditor/FCKeditor/fckeditor.js”></script> )
%z.vb|�UD03.FCKeditor API 调用 (必须加头文件 <%@ page language=”java” import=”com.fredck.FCKeditor.*” %> )中天在线博客EwP X%{0}:~%_+RG
–%>

<%–中天在线博客U2QBN4Gs(Y|pD2O7]
<form. action=”show.jsp” method=”post” target=”_blank”>
*vLN0^6h-O%w_X0    <FCK:editor id=”content” basePath=”/TestFCKeditor/FCKeditor/”中天在线博客@V^XIZ@
        width=”700″ height=”500″ skinPath=”/TestFCKeditor/FCKeditor/editor/skins/silver/”中天在线博客:C�WbC%|%N5W'd
        toolbarSet = “Default”>
2Hfh[#h0SG$uX0        内容中天在线博客7xvb;]^�pP
    </FCK:editor>
7mL-u}�cK0    <input type=”submit” value=”Submit”>
M-H1O0T4u6NR~KRK @H0</form>
L3q)ujgif0–%>

<form. action=”show.jsp” method=”post” target=”_blank”>中天在线博客Y�RU[/6AbC
    <table border=”0″ width=”700″>
({:|L*h:p:o L#N0      <tr>
I&~E L$[N0      <td>中天在线博客OF8uM�rns*e
        <textarea id=”content” name=”content” style=”WIDTH: 100%; HEIGHT: 400px”>input</textarea>中天在线博客[ A8IDjH ^
        <script. type=”text/javascript”>中天在线博客5c.F_gTC1u$P`
              var FCKeditor = new FCKeditor(’content?  ;
4[e%/ i*hEx0hV0              oFCKeditor.BasePath = “/TestFCKeditor/FCKeditor/” ;
Hw;T Ko,@!Nv0FM0              oFCKeditor.Height = 400;中天在线博客!b#d7BYtqU1S
              oFCKeditor.ToolbarSet = “Default” ;
Gq3dY0q&W4_0              oFCKeditor.ReplaceTextarea();中天在线博客!T)oC ow"w
        </script>
0]$W4QMG:w0        <input type=”submit” value=”Submit”>
*Z*hAc�d(v�c0      </td>
EO G;J8_'x0      </tr>中天在线博客&g7p9tCC-R5^u
    </table>
o;l'| `yY4l0</form>

<%–
gq/Q/x(}0<form. action=”show.jsp” method=”post” target=”_blank”>中天在线博客/H RD} | p:S
<%中天在线博客([*CgV,F{ jy)ct
FCKeditor oFCKeditor ;
;gs6j:Rt:j0oFCKeditor = new FCKeditor( request, “content” ) ;中天在线博客4H+OSxw ]H%y
oFCKeditor.setBasePath( “/TestFCKeditor/FCKeditor/” ) ;
)tv&Rb1bp KJ0oFCKeditor.setValue( “input” );
F4^dl|0out.println( oFCKeditor.create() ) ;中天在线博客5m)Mb"zpYsz
%>中天在线博客2O,q*i0d$n3Z2|q R
<br>中天在线博客;X)F1em-i,E `
<input type=”submit” value=”Submit”>中天在线博客,O_4/0n7`+s.wB4F
</form>中天在线博客S0/1J/#J*d$l
–%>

添加文件/TestFCKeditor/show.jsp:中天在线博客#^&T/E0H/RXq b
<%
l],/}'Vf6D1Cs0String content = request.getParameter(”content”);
m f/ k+C&MT'l)A dW0out.print(content);中天在线博客]6}E6A%Z /n.v
%>

====================================

1、适时打开编辑器
&uXL?)MuA0------------------------------------
:y S-KC0P8Sl0很多时候,我们在打开页面的时候不需要直接打开编辑器,而在用到的时候才打开,这样一来有很好的用户体验,另一方面可以消除FCK在加载时对页面打开速度的影响,点击“Open Editor”按钮后才打开编辑器界面。

实现原理:
0Ug Q,{ vt0使用JAVASCRIPT版的FCK,在页面加载时(未打开FCK),创建一个隐藏的TextArea域,这个TextArea
t0h1u9Mg kk6w!d0的name和ID要和创建的FCK实例名称一致,然后点击”Open Editor”按钮时,通过调用一段函数,使用
|%G'X Oz�I-M�p0FCK的ReplaceTextarea()方法来创建FCKeditor,代码如下:
7^e P9s b0------------------------------------
6TVl }X%B!Lzy9s0<script. type=”text/javascript”>
]&s9Q0TPna0<!–
8/,Hp-G)r:oCv(FH0function showFCK(){
$gR)ok1X]F ft0  var FCKeditor = new FCKeditor( ‘fbContent’ ) ;中天在线博客G/"o5GX$`8`7y
  oFCKeditor.BasePath = ‘/FCKeditor/’ ;
1o K d7o@!d2q;Ra0  oFCKeditor.ToolbarSet = ‘Basic’ ;
9Y{[/WM_M3A0  oFCKeditor.Width = ‘100%’ ;中天在线博客7Qj4mu[8e-n
  oFCKeditor.Height = ‘200′ ;
p6WU#^5aow}K(k0  oFCKeditor.ReplaceTextarea() ;中天在线博客a2U#a:{ {w�V@�bBf
}
)X8Rr e'x} /O0//–>
kFZm1RzB Q |0</script>
nX5}V;UiH._I0<textarea name=”fbContent” id=”fbContent”></textarea>

2、使用FCKeditor 的 API
A.A!k8f:T0-------------------------------------中天在线博客W%e'C*K/|H
FCKeditor编辑器,提供了非常丰富的API,用于给End User实现很多想要定制的功能,比如最基本的数据验证,如何在提交的时候用JS判断当前编辑器区域内是否有内容,FCK的API提供了GetLength()方法;

再比如如何通过脚本向FCK里插入内容,使用InsertHTML()等;

还有,在用户定制功能时,中间步骤可能要执行FCK的一些内嵌操作,那就用ExecuteCommand()方法。

详细的API列表,请查看FCKeditor的Wiki。而常用的API,请查看FCK压缩包里的_samples/html/sample08.html。此处就不贴代码了。

3、外联编辑条(多个编辑域共用一个编辑条)
|-]*/mK5RR�B0--------------------------------------
K%WB^[ U0这个功能是2.3版本才开始提供的,以前版本的FCKeditor要在同一个页面里用多个编辑器的话,得一个个创建,现在有了这个外联功能,就不用那么麻烦了,只需要把工具条放在一个适当的位置,后面就可以无限制的创建编辑域了。

要实现这种功能呢,需要先在页面中定义一个工具条的容器:<div id=”xToolbar”></div>,然后再根据这个容器的id属性进行设置。

JAVASCRIPT实现代码:
W5p0uY F+`3Gp4u0--------------------------------------
9p$sg!j*Y,b0<div id=”xToolbar”></div>中天在线博客^(G:[Y/1G+xx
FCKeditor 1:
4eH#F B'P a0<script. type=”text/javascript”>中天在线博客-k/F{8Y#e^g!v
<!–
^4w8GlS nJ0    // Automatically calculates the editor base path based on the _samples directory.
LwL-A m0    // This is usefull only for these samples. A real application should use something like this:
4|'l0N%M&v"v0    // oFCKeditor.BasePath = ‘/fckeditor/’; // ‘/fckeditor/’ is the default value.
_jL%F |X0    var sBasePath = document.location.pathname.substring(0,document.location.pathname.lastIndexOf(’_samples’));

    var FCKeditor = new FCKeditor( ‘FCKeditor_1′ );
9xn s c(Tv0    oFCKeditor.BasePath = sBasePath;
c_kT nf [v0    oFCKeditor.Height = 100;
3W3` i$r)jc b-C2O+A0    oFCKeditor.Config[ ‘ToolbarLocation’ ] = ‘Out:parent(xToolbar)’;
:XuV(k F+`0    oFCKeditor.Value = ‘This is some <strong>sample text</strong>. You are using FCKeditor.’;
~ p!hd-ppQ A0    oFCKeditor.Create();中天在线博客)[3Ep%_)T^
//–>
~M*P+R_4a2Rz�C+w0</script>中天在线博客z;_6J9f$m0Wq,M
<br />
kc,P;A_p#V%z6z$T.b${0FCKeditor 2:
z4cAESp{0<script. type=”text/javascript”>
%E%nU |jmP0<!–
^"O_:Sw~;?.S.r8C0    FCKeditor = new FCKeditor( ‘FCKeditor_2′ );
8Do8Aj(/ o+`0    oFCKeditor.BasePath = sBasePath;
"J Q)`)P3},tL'H0    oFCKeditor.Height = 100;中天在线博客�DxsFv
    oFCKeditor.Config[ ‘ToolbarLocation’ ] = ‘Out:parent(xToolbar)’;
evb:W&b[.V0    oFCKeditor.Value = ‘This is some <strong>sample text</strong>. You are using FCKeditor.’;
8]gp w?*U0    oFCKeditor.Create();
8HgrQY-S0//–>中天在线博客8S-m q3AiDy?
</script>中天在线博客4H;H&b(^9tc
-------------------------------------中天在线博客ml| H]:LH
此部分的详细DEMO请参照_samples/html/sample11.html,_samples/html/sample11_frame.html

4、文件管理功能、文件上传的权限问题中天在线博客DO/S.q�} |)bbi
-------------------------------------
$]/$I ZWF0一直以来FCKeditor的文件管理部分的安全是个值得注意,但很多人没注意到的地方,虽然FCKeditor在各个Release版本中一直存在的一个功能就是对上传文件类型进行过滤,但是她没考虑过另一个问题:到底允许谁能上传?到底谁能浏览服务器文件?

之 前刚开始用FCKeditor时,我就出现过这个问题,还好NetRube(FCKeditor中文化以及FCKeditor ASP版上传程序的作者)及时提醒了我,做法是去修改FCK上传程序,在里面进行权限判断,并且再在fckconfig.js里把相应的一些功能去掉。但 随之FCK版本的不断升级,每升一次都要去改一次配置程序fckconfig.js,我发觉厌烦了,就没什么办法能更好的控制这种配置么?事实上,是有 的。

在fckconfig.js里面,有关于是否打开上传和浏览服务器的设置,在创建FCKeditor时,通过程序来判断是否创建有上传浏览功能的编辑器。首先,我先在fckconfig.js里面把所有的上传和浏览设置全设为false,接着我使用的代码如下:

JAVASCRIPT版本:中天在线博客!wXr+V$RU9d0M
-------------------------------------
6^LZ2J|q"?0<script. type=”text/javascript”>
sx#A?#q;K0    var FCKeditor = new FCKeditor( ‘fbContent’ );中天在线博客 `nTlg:w!c
    <% if power = powercode then %>
,d-b:V k0z0    oFCKeditor.Config[’LinkBrowser’] = true;中天在线博客!ji1oz0}
    oFCKeditor.Config[’ImageBrowser’] = true;中天在线博客5H O+e'b/K
    oFCKeditor.Config[’FlashBrowser’] = true;中天在线博客BKS [,vS[+d
    oFCKeditor.Config[’LinkUpload’] = true;
9b+s)]cST@;M0    oFCKeditor.Config[’ImageUpload’] = true;中天在线博客/O3F�WlPa"?|
    oFCKeditor.Config[’FlashUpload’] = true;
0? g;/!Ujo0    <% end if %>中天在线博客.Y{/5V,on9X {
    oFCKeditor.ToolbarSet = ‘Basic’;中天在线博客)U} O6W8Mi
    oFCKeditor.Width = ‘100%’;
#xk,{!B+c%CnP K~0    oFCKeditor.Height = ‘200′;中天在线博客$? L ?#z XU
    oFCKeditor.Value = ‘’;
L+Beo7YZ*e0    oFCKeditor.Create();
;tJ�A$i2jNW*wkh0</script>
I[k;ZE1i/}/w*`3[0-------------------------------------

在按钮旁边加文字中天在线博客$Z3x-_ Q'w?@
-------------------------------------
e#D"M4G,o y p:qJ0打开 editor/js/ 两个js文件
#k3Dj)X[eaQdT(M tF0fckeditorcode_gecko.js
RK z.y7}U�I#}+w,V0fckeditorcode_ie.js

第一个是支持非ie浏览器的
6V3luZm4t&E)iIA0第二个文件是支持ie浏览器的

搜索 FCKToolbarButton,可以看到许多类似这样的语句:
xpd.g"L0case ‘Save’:B = new FCKToolbarButton(’Save’, FCKLang.Save, null, null, true, null, 3); break;

‘Save’是按钮英文名字中天在线博客3ApJJ5z}`
FCKToolbarButton 的四个参数分别是:中天在线博客Lodcz!Cex s7m9Uz
按钮命令名称,按钮标签文字,按钮工具提示,按钮样式,按钮是否在源代码模式可见,按钮下拉菜单其中将第4项参数设置为 FCK_TOOLBARITEM_ICONTEXT 即可使按钮旁边出现文字,注意没有引号。
8lp:w/n(XF0例如:中天在线博客Si!tl`;|
case ‘Preview’:B = new FCKToolbarButton(’Preview’, FCKLang.Preview, null, FCK_TOOLBARITEM_ICONTEXT, true, null, 5);
7EqL&cZu6L0这样我们就可以将 我们经常用的3种模式源代码、预览、全屏编辑按钮都加上文字了。

解释fck样式的工作原理中天在线博客5B.?(?/g?K|u#q&~4R
-------------------------------------中天在线博客[+Yt8`"H"o
fck的样式设置涉及到了两个文件,一个是你定义好的样式表文件.css,另一个是告诉fck样式表如何使用的xml文件,两个文件确一不可。中天在线博客 N-S3{ C_4{
css文件的位置是不做要求的,但是需要你在应用的编辑器的页面上插入样式表文件的链接。这样才能显示出来样式。
s#`d5v |0fckstyles.xml 在与editor目录同级的目录下。该文件定义了那些样式可以使用在那些标签里面。

这就是fck自带的样式xml定义:
[y7r$ck]vY0<?xml version=”1.0″ encoding=”utf-8″ ?>
2M-N4E0B rY/n7{0<Styles>中天在线博客,HPQ tfV
  <Style name=”Image on Left” element=”img”>中天在线博客 Kln&@ OY(sOx z
    <Attribute name=”style” value=”padding: 5px; margin-right: 5px” />中天在线博客%Bh$Os:dRe g
    <Attribute name=”border” value=”2″ />
Rp cuT,iH0    <Attribute name=”align” value=”left” />
@waK3U3L:U?:^@�Y:n0  </Style>中天在线博客|3X,T2^ Pf
  <Style name=”Image on Right” element=”img”>中天在线博客'R4{{gB0e IZ+Y
    <Attribute name=”style” value=”padding: 5px; margin-left: 5px” />
NT[3E[#G$D&j D0    <Attribute name=”border” value=”2″ />
/.M ` o!S0    <Attribute name=”align” value=”right” />中天在线博客2t*x�tHDw(m-K
  </Style>
&b8G:Fdd&TA#/0  <Style name=”Custom Bold” element=”span”>
/@J$JK9mv#/E5S0    <Attribute name=”style” value=”font-weight: bold;” />
+u!l(b.^m OE%d0  </Style>
BTVj)P9R _0  <Style name=”Custom Italic” element=”em” />
5v[Y(?kNt5q0  <Style name=”Title” element=”span”>
6S#QWr6j1CH0    <Attribute name=”class” value=”Title” />中天在线博客.b#~Y:rP ?X
  </Style>
/ZXa&a)C2nE s0  <Style name=”Code” element=”span”>
k.hD'J mo1H0B0    <Attribute name=”class” value=”Code” />中天在线博客;]5aE+n-TG.`5Y*PZ
  </Style>
a cH p;n0  <Style name=”Title H3″ element=”h3″ />
n!_)_&mY f,_2?i0  <Style name=”Custom Ruler” element=”hr”>
l(a Az-|D ^&S(YN0    <Attribute name=”size” value=”1″ />中天在线博客w/wH&wB _ bKk.c
    <Attribute name=”color” value=”#ff0000″ />中天在线博客"p$c^ y2hh} v
  </Style>
7Wo5}vv CBE5a+pz0</Styles>

每 一个<style>将来会生成一个样式的菜单项。name名称就是显示在菜单里的文字;element定义了该样式可以应用在那种html标 签上,<Attribute>的 name 指定了将会修改标签的哪个属性来应用样式,value则是修改成的值。
2iS0xk s)q.SjN0看这个:
9I:// X:_/J ~ y0<Style name=”Title” element=”span”>中天在线博客yy+S8V9n jPFaq5d
  <Attribute name=”class” value=”Title” />
$c?{.jXs0</Style>

如果你在fck选定了文字 “经典论坛 》 前台制作与脚本专栏 》 FCKeditor 实战技巧 - 1 》 编辑帖子” 应用该样式 则原来文字就会变成<span class=”Title”>经典论坛 》 前台制作与脚本专栏 》 FCKeditor 实战技巧 - 1 》 编辑帖子</span>

注意:如果编辑器呈整页编辑状态,那么整页里面也需要插入样式表链接才能显示出来样式。

============================================

FCKeditor JavaScript. API(翻译整理)
7h$O1SWM/a,cN[0原文地址:http://wiki.fckeditor.net/Developer%27s_Guide/Javascript_API
cW'J'f%z,t6I0--------------------------------------------中天在线博客 R(I`2nM7@*G'g"N
FCK 编辑器加载后,将会注册一个全局的 FCKeditorAPI 对象。

FCKeditorAPI 对象在页面加载期间是无效的,直到页面加载完成。如果需要交互式地知道 FCK 编辑器已经加载完成,可使用“FCKeditor_OnComplete”函数。中天在线博客0` ad-?gG#r9qL
<script. type=”text/javascript”>
v;b Z4Ff[Qkf_0function FCKeditor_OnComplete(editorInstance) {中天在线博客N;Bu t3^2@
  FCKeditorAPI.GetInstance(’FCKeditor1′).Commands.GetCommand(’FitWindow’).Execute();中天在线博客3?r2U$g/g:er]
}
I)M/#wW%c/"^8c0</script>

在当前页获得 FCK 编辑器实例:中天在线博客+/ ^(y_C,Jz|,F
var Editor = FCKeditorAPI.GetInstance(’InstanceName’);

从 FCK 编辑器的弹出窗口中获得 FCK 编辑器实例:中天在线博客bE8XFb
var Editor = window.parent.InnerDialogLoaded().FCK;

从框架页面的子框架中获得其它子框架的 FCK 编辑器实例:
xy7VZ+i0var Editor = window.FrameName.FCKeditorAPI.GetInstance(’InstanceName’);

从页面弹出窗口中获得父窗口的 FCK 编辑器实例:
M[mEp#J0var Editor = opener.FCKeditorAPI.GetInstance(’InstanceName’);

获得 FCK 编辑器的内容:中天在线博客$H(yQ+d4D8?
oEditor.GetXHTML(formatted); // formatted 为:true|false,表示是否按HTML格式取出
fB4aF9L0也可用:中天在线博客9J OdWR,huo
oEditor.GetXHTML();

设置 FCK 编辑器的内容:
Z#{1hpH,n:y0oEditor.SetHTML(”content”, false); // 第二个参数为:true|false,是否以所见即所得方式设置其内容。此方法常用于“设置初始值”或“表单重置”操作。

插入内容到 FCK 编辑器:中天在线博客[pV3s z
oEditor.InsertHtml(”html”); // “html”为HTML文本

检查 FCK 编辑器内容是否发生变化:
&Tc)eK'Wf&U0oEditor.IsDirty();

在 FCK 编辑器之外调用 FCK 编辑器工具条命令:
Gwz$B,L*fT5jZ0命令列表如下:中天在线博客j;AW'Kg2h@
--------------------------------------------
,e&~u`PHi+j0DocProps, Templates, Link, Unlink, Anchor, BulletedList, NumberedList, About, Find, Replace, Image, Flash, SpecialChar, Smiley, Table, TableProp, TableCellProp, UniversalKey, Style, FontName, FontSize, FontFormat, Source, Preview, Save, NewPage, PageBreak, TextColor, BGColor, PasteText, PasteWord, TableInsertRow, TableDeleteRows, TableInsertColumn, TableDeleteColumns, TableInsertCell, TableDeleteCells, TableMergeCells, TableSplitCell, TableDelete, Form, Checkbox, Radio, TextField, Textarea, HiddenField, Button, Select, ImageButton, SpellCheck, FitWindow, Undo, Redo中天在线博客$]I+O#U3tX(~7{
--------------------------------------------
S PE7sy'}0使用方法如下:
sd$Kh L$jj.jg0--------------------------------------------
8mT4BQ(j"P$k'Uo0oEditor.Commands.GetCommand(’FitWindow’).Execute();
.Xk.I&P#q+f%}�F0--------------------------------------------

你可能感兴趣的:(JavaScript,c,servlet,fckeditor,服务器,action)