日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于CKeditor的个性应用设置 转

發(fā)布時(shí)間:2024/4/11 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于CKeditor的个性应用设置 转 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)自http://www.jb51.net/

"

因?yàn)槲业木W(wǎng)站需要一個(gè)編輯器,所以用周末時(shí)間研究了一下CKeditor,終于最終修改成了合適的樣子。 CKeditor,以前叫FCKeditor,已經(jīng)使用過好多年了,功能自然沒的說。最近升級(jí)到3.0版,好像重寫了代碼,所以構(gòu)建的方式也有了些變化,應(yīng)該說是更簡(jiǎn)單了。

相關(guān)地址:?
官方網(wǎng)站:http://ckeditor.com/?
下載地址:http://ckeditor.com/download?
CKfinder:http://ckfinder.com/ 用于上傳的插件(有四種語言版本,根據(jù)需要下載)?


部署:?
將CKeditor下載下來,解壓網(wǎng)站/ckeditor/下面(當(dāng)然名字可以修改,只是需要修改相應(yīng)config文件來設(shè)置新路徑)?

調(diào)用:?
在頁面的head中調(diào)用?
  <script type="text/javascript" src="/ckeditor/ckeditor.js"></script>?
然后在需要編輯器的地方放置一下代碼:?
復(fù)制代碼代碼如下:
<textarea cols="80" id="Text" name="Text" rows="10">這里是默認(rèn)值,修改文本的內(nèi)容是放在這里。html需要進(jìn)行HTMLEncode編碼</textarea>?
<script type="text/javascript">?
var editor = CKEDITOR.replace('Text');?
</script>?


搞定,就這么簡(jiǎn)單,CKEDITOR.replace('Text')就是創(chuàng)建編輯器的代碼,CKEDITOR.replace()方法中還可以設(shè)置編輯器的樣式,設(shè)置如下?
復(fù)制代碼代碼如下:
var editor = CKEDITOR.replace( 'Text',?
{?
language:'zh-cn',//簡(jiǎn)體中文?
toolbar ://工具欄設(shè)置?
[?
['Source'],?
'/',?
['Cut','Copy','Paste','PasteText','PasteFromWord'],?
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],?
['TextColor','BGColor'],?
]?
});?

具體的設(shè)置有很多,具體的可以查看他的幫助:http://docs.cksource.com/ckeditor_api/symbols/CKEDITOR.config.html
這個(gè)設(shè)置可以在/ckeditor/config.js中設(shè)置,在這里設(shè)置之后,就修改了編輯器的默認(rèn)默認(rèn)設(shè)置,而上面設(shè)置只應(yīng)用于當(dāng)前編輯器。
具體的設(shè)置方法如下

復(fù)制代碼代碼如下:
CKEDITOR.editorConfig = function( config )?
{?
// Define changes to default configuration here. For example:?
config.language = 'zh-cn'; //配置語言?
//config.uiColor = '#FFF'; //背景顏色?
config.width = 500; //寬度?
config.height = 400; //高度?
config.skin='v2'; //設(shè)置編輯器的風(fēng)格,不太喜歡現(xiàn)在的樣子,還是喜歡v2版本的樣子,干凈、清爽。?
//工具欄?
config.toolbar =?
[?
['Source'],?
'/',?
['Cut','Copy','Paste','PasteText','PasteFromWord'],?
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],?
['TextColor','BGColor'],?
]?
};?

數(shù)據(jù)提交?
到這里我們已經(jīng)基本上設(shè)置好了。如果調(diào)用的話后臺(tái)可以使用request["text"]來獲取編輯器的文本。?
在fckeditor(Ver 2.0)中時(shí),它提供了一個(gè)web控件,可以直接使用,但是在3.x中好像沒有提供,好在我用的Asp.net Mvc所以有沒有的對(duì)我來說沒有任何問題。?
提到上面的一句是因?yàn)?#xff0c;默認(rèn)的asp.net是禁止上傳帶有html標(biāo)簽的文本的,當(dāng)然可以通過修改頁面的配置來實(shí)現(xiàn),但是在fckeditor(Ver 2.0)中他在提交數(shù)據(jù)前對(duì)內(nèi)容進(jìn)行了HTMLEncode(將&<>分別替換成了&<>),確實(shí)是一個(gè)非常棒的方法,這樣就不需要對(duì)asp.net的默認(rèn)設(shè)置進(jìn)行修改。?
但是在CKeditor中默認(rèn)提交就是將原始的數(shù)據(jù)直接post了,后來通過以前老版本的代碼發(fā)現(xiàn)其實(shí)CKeditor提供了一個(gè)方法可以進(jìn)行HTMLEncode,它就是CKEDITOR.tools.htmlEncode(string),如果直接使用form表填submit就沒有辦法實(shí)現(xiàn)了,所以只能采用JavaScript進(jìn)行提交。我的選擇是使用jQuery的ajax方式提交。代碼如下:?
復(fù)制代碼代碼如下:
$(function(){?
$("#btSubmit").click(function(){//$("#btSubmit")獲取的是提交按鈕,這里綁定提交按鈕的click事件
var oEditor = CKEDITOR.instances.Text;//獲得編輯器對(duì)象?
var text = oEditor.getData();//獲取編輯器的數(shù)據(jù)?
text = CKEDITOR.tools.htmlEncode(text);//進(jìn)行HTMLEncode編碼?
$.post("PostUrl",{Text:text},callback);//提交數(shù)據(jù),具體的調(diào)用方式和返回類型請(qǐng)查閱jQuery的幫助?
function callback(data){}//回調(diào)函數(shù)?
});?
})?

提交到服務(wù)器在進(jìn)行反向的編碼就可以了。?
安全性?
通過上面的提交雖然很好,但是繞過了系統(tǒng)默認(rèn)的安全防御,很容易被提交惡意代碼,所以在服務(wù)器端還需要進(jìn)行安全的驗(yàn)證。?
雖然CKeditor提供了驗(yàn)證的設(shè)置方法,但是我沒有試驗(yàn)成功(Ver2時(shí)代就沒成功),不曉得他是怎么運(yùn)作的,有時(shí)間好好研究下,代碼如下:?
復(fù)制代碼代碼如下:
//在/ckeditor/config.js文件的CKEDITOR.editorConfig中添加一下代碼?
config.protectedSource.push( /<\s*iframe[\s\S]*?>/gi ) ; // <iframe> tags.?
config.protectedSource.push( /<\s*frameset[\s\S]*?>/gi ) ; // <frameset> tags.?
config.protectedSource.push( /<\s*frame[\s\S]*?>/gi ) ; // <frame> tags.?
config.protectedSource.push( /<\s*script[\s\S]*?\/script\s*>/gi ) ; // <SCRIPT> tags.?
config.protectedSource.push( /<%[\s\S]*?%>/g ) ; // ASP style server side code?
config.protectedSource.push( /<\?[\s\S]*?\?>/g ) ; // PHP style server side code?
config.protectedSource.push( /(<asp:[^\>]+>[\s|\S]*?<\/asp:[^\>]+>)|(<asp:[^\>]+\/>)/gi ) ;?

服務(wù)器端的驗(yàn)證項(xiàng)目跟上面提到的一樣,都是根據(jù)標(biāo)簽名稱來判斷是否允許提交。?
文件上傳?
在新版本中文件上傳方式有了很大的改變。它采用CKfinder這個(gè)插件來實(shí)現(xiàn),首先還是需要下載一個(gè)CKfinder解壓到網(wǎng)站/CKfinder/下面?
路徑也可以修改,修改后需要調(diào)用代碼、/CKfinder/config.ascx文件、/CKfinder/ckfinder.js文件?
/CKfinder/config.ascx文件需要修改BaseUrl = "/新文件夾名/userfiles/";?
/CKfinder/ckfinder.js文件需要修改CKFinder.DEFAULT_BASEPATH = '/新文件夾名/';?
調(diào)用方式:?
復(fù)制代碼代碼如下:
<textarea cols="80" id="Text" name="Text" rows="10"></textarea>?
<script type="text/javascript">?
var editor = CKEDITOR.replace( 'Text');?
CKFinder.SetupCKEditor(editor, '/新文件夾名(或默認(rèn))/');?
</script>?

現(xiàn)在在打開編輯器的圖片、鏈接、flash,窗口就多了一個(gè)上傳選項(xiàng)卡,可以選擇上傳,還提供了瀏覽功能。?
因?yàn)樯婕暗轿募A的訪問權(quán)限,功能與我的網(wǎng)站需求不符,所以我沒有使用它提供的默認(rèn)上傳,對(duì)他進(jìn)行了修改。?
上傳方式的修改?
我的圖片服務(wù)器是image.tiyu.cc而網(wǎng)站的服務(wù)器是http://www.jb51.net/,也不需要它提供的瀏覽功能,而且除了圖片上傳,不允許上傳其他的文件。?
這樣就需要有三個(gè)地方需要修改,1.修改默認(rèn)上傳2.取消瀏覽功能3.取消文件、flash上傳功能。?
CKeditor的上傳路徑設(shè)置在/CKfinder/ckfinder.js中,有一項(xiàng)設(shè)置是CKFinder.SetupCKEditor,它的下面有以下代碼,可以設(shè)置是否需要圖片、文件、flash的瀏覽路徑以及上傳路徑。?
復(fù)制代碼代碼如下:
//設(shè)置文件的瀏覽路徑?
editorObj.config.filebrowserBrowseUrl = url ;?
//設(shè)置圖片的瀏覽路徑?
editorObj.config.filebrowserImageBrowseUrl = url + qs + 'type=' + ( imageType || 'Images' ) ;?
//設(shè)置flash文件瀏覽路徑?
editorObj.config.filebrowserFlashBrowseUrl = url + qs + 'type=' + ( flashType || 'Flash' ) ;?
//設(shè)置文件上傳文件地址?
editorObj.config.filebrowserUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."?
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=Files" ;?
//設(shè)置圖片文件上傳地址?
editorObj.config.filebrowserImageUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."?
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( imageType || 'Images' ) ;?
//設(shè)置flash文件上傳地址?
editorObj.config.filebrowserFlashUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector."?
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( flashType || 'Flash' ) ;?

根據(jù)CKeditor是根據(jù)上傳路徑的有無來控制是否顯示相應(yīng)的上傳標(biāo)簽,瀏覽按鈕也是。?
根據(jù)上面的需求,設(shè)置如下:?
復(fù)制代碼代碼如下:
//設(shè)置文件的瀏覽路徑?
editorObj.config.filebrowserBrowseUrl = "";?
//設(shè)置圖片的瀏覽路徑?
editorObj.config.filebrowserImageBrowseUrl = "";?
//設(shè)置flash文件瀏覽路徑?
editorObj.config.filebrowserFlashBrowseUrl = "";?
//設(shè)置文件上傳文件地址?
editorObj.config.filebrowserUploadUrl = "";?
//設(shè)置圖片文件上傳地址?
editorObj.config.filebrowserImageUploadUrl = "新地址";?
//設(shè)置flash文件上傳地址?
editorObj.config.filebrowserFlashUploadUrl = "";?

設(shè)置到這里再次打開編輯器的相應(yīng)窗口就會(huì)發(fā)現(xiàn)除了圖片上傳按鈕外其他的瀏覽上傳都隱藏掉了。

創(chuàng)建新的上傳文件?
具體步驟是,首先創(chuàng)建一個(gè)新的上傳接收文件,接受并保存上傳的文件,然后將文件的路徑反饋給編輯器。?

編輯器的接收是通過一個(gè)方法實(shí)現(xiàn)的,具體如下:?
  CKEDITOR.tools.callFunction(fnID, 'FileUrl', 'Message');</script>?

其中fnID是調(diào)用的實(shí)際方法的編號(hào),不同的瀏覽器,CKeditor調(diào)用不同的方法。?

我們只需要調(diào)用上面的方法就可以了,具體上傳成功后,在頁面上輸出一下代碼?

<script type="text/javascript">window.parent.CKEDITOR.tools.callFunction(fnID, 'http://www.jb51.net/image.jpg', '上傳成功');</script>?

FileUrl、Message,可以只有一個(gè),也可以同時(shí)存在。Message主要應(yīng)用于上傳失敗時(shí)的提示信息。?

關(guān)于fnID,這個(gè)具體的說明不是很清楚,但是通過代碼發(fā)現(xiàn)FF瀏覽器它的值是2,其他的瀏覽器是1,通過這個(gè)可以得出結(jié)論是,通過它來告知CKeditor來調(diào)用哪個(gè)方法接受上傳反饋信息。?

這個(gè)值,可以通過我們自己的程序去獲得。但是更好的方式是CKeditor給我們提供的值,當(dāng)我們?cè)O(shè)置editorObj.config.filebrowserImageUploadUrl = "新地址"時(shí)CKeditor會(huì)自動(dòng)為我們?cè)黾訋讉€(gè)個(gè)url參數(shù):?
新地址?CKEditor=Text&CKEditorFuncNum=2&langCode=zh-cn?
其中CKEditorFuncNum就是我們需要的fnID,我們可以直接獲取到,然后反饋回來就好了。?

如果選擇跨域上傳,只需要在當(dāng)前域(http://www.jb51.net/)設(shè)置一個(gè)GetFile.aspx他有三個(gè)參數(shù),分別是接受fnID,FileUrl、Message這三個(gè)值,在我們的editorObj.config.filebrowserImageUploadUrl中設(shè)置成http://Image.jb51.net/upfile.aspx?backUrl=http://www.jb51.net/GetFile.aspx,就可以了,image.jb51.net域的upfile.aspx接受到文件,處理完成之后:?
復(fù)制代碼代碼如下:
ImageUrl="http://image.jb51.net/UpFile/2009/11/1/2009111201346_695.jpg"?
Message="根據(jù)錯(cuò)誤與否,設(shè)置,沒有錯(cuò)誤可以為空"?
CKEditorFuncNum=request("CKEditorFuncNum")?
response.Redirect("http://www.jb51.net/GetFile.php?ImageUrl="+ ImageUrl + "&Message=" + Message + "&CKEditorFuncNum=" + CKEditorFuncNum)?


搞定,收工,睡覺,做個(gè)好夢(mèng)。

"

轉(zhuǎn)載于:https://www.cnblogs.com/ndxsdhy/archive/2011/05/23/2054678.html

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的关于CKeditor的个性应用设置 转的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。