国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

關于HTML編輯器CKeditor的非主流個性應用的設置

2024-07-21 02:53:38
字體:
來源:轉載
供稿:網友
因為我的網站需要一個編輯器,所以用周末時間研究了一下CKeditor,終于最終修改成了合適的樣子。
 
CKeditor,以前叫FCKeditor,已經使用過好多年了,功能自然沒的說。最近升級到3.0版,好像重寫了代碼,所以構建的方式也有了些變化,應該說是更簡單了。

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


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

調用: 
在頁面的head中調用 
  <script type="text/javascript" src="/ckeditor/ckeditor.js"></script> 
然后在需要編輯器的地方放置一下代碼: 
復制代碼代碼如下:

<textarea cols="80" id="Text" name="Text" rows="10">這里是默認值,修改文本的內容是放在這里。html需要進行HTMLEncode編碼</textarea> 
<script type="text/javascript"> 
var editor = CKEDITOR.replace('Text'); 
</script> 


搞定,就這么簡單,CKEDITOR.replace('Text')就是創建編輯器的代碼,CKEDITOR.replace()方法中還可以設置編輯器的樣式,設置如下 
復制代碼代碼如下:

var editor = CKEDITOR.replace( 'Text', 

language:'zh-cn',//簡體中文 
toolbar ://工具欄設置 

['Source'], 
'/', 
['Cut','Copy','Paste','PasteText','PasteFromWord'], 
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'], 
['TextColor','BGColor'], 

}); 

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

復制代碼代碼如下:

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'; //設置編輯器的風格,不太喜歡現在的樣子,還是喜歡v2版本的樣子,干凈、清爽。 
//工具欄 
config.toolbar = 

['Source'], 
'/', 
['Cut','Copy','Paste','PasteText','PasteFromWord'], 
['Bold','Italic','Underline','Strike','-','Subscript','Superscript'], 
['TextColor','BGColor'], 

}; 

數據提交 
到這里我們已經基本上設置好了。如果調用的話后臺可以使用request["text"]來獲取編輯器的文本。 
在fckeditor(Ver 2.0)中時,它提供了一個web控件,可以直接使用,但是在3.x中好像沒有提供,好在我用的Asp.net Mvc所以有沒有的對我來說沒有任何問題。 
提到上面的一句是因為,默認的asp.net是禁止上傳帶有html標簽的文本的,當然可以通過修改頁面的配置來實現,但是在fckeditor(Ver 2.0)中他在提交數據前對內容進行了HTMLEncode(將&<>分別替換成了&<>),確實是一個非常棒的方法,這樣就不需要對asp.net的默認設置進行修改。 
但是在CKeditor中默認提交就是將原始的數據直接post了,后來通過以前老版本的代碼發現其實CKeditor提供了一個方法可以進行HTMLEncode,它就是CKEDITOR.tools.htmlEncode(string),如果直接使用form表填submit就沒有辦法實現了,所以只能采用JavaScript進行提交。我的選擇是使用jQuery的ajax方式提交。代碼如下: 
復制代碼代碼如下:

$(function(){ 
$("#btSubmit").click(function(){//$("#btSubmit")獲取的是提交按鈕,這里綁定提交按鈕的click事件 
var oEditor = CKEDITOR.instances.Text;//獲得編輯器對象 
var text = oEditor.getData();//獲取編輯器的數據 
text = CKEDITOR.tools.htmlEncode(text);//進行HTMLEncode編碼 
$.post("PostUrl",{Text:text},callback);//提交數據,具體的調用方式和返回類型請查閱jQuery的幫助 
function callback(data){}//回調函數 
}); 
}) 

提交到服務器在進行反向的編碼就可以了。 
安全性 
通過上面的提交雖然很好,但是繞過了系統默認的安全防御,很容易被提交惡意代碼,所以在服務器端還需要進行安全的驗證。 
雖然CKeditor提供了驗證的設置方法,但是我沒有試驗成功(Ver2時代就沒成功),不曉得他是怎么運作的,有時間好好研究下,代碼如下: 
復制代碼代碼如下:

//在/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 ) ; 

服務器端的驗證項目跟上面提到的一樣,都是根據標簽名稱來判斷是否允許提交。 
文件上傳 
在新版本中文件上傳方式有了很大的改變。它采用CKfinder這個插件來實現,首先還是需要下載一個CKfinder解壓到網站/CKfinder/下面 
路徑也可以修改,修改后需要調用代碼、/CKfinder/config.ascx文件、/CKfinder/ckfinder.js文件 
/CKfinder/config.ascx文件需要修改BaseUrl = "/新文件夾名/userfiles/"; 
/CKfinder/ckfinder.js文件需要修改CKFinder.DEFAULT_BASEPATH = '/新文件夾名/'; 
調用方式: 
復制代碼代碼如下:

<textarea cols="80" id="Text" name="Text" rows="10"></textarea> 
<script type="text/javascript"> 
var editor = CKEDITOR.replace( 'Text'); 
CKFinder.SetupCKEditor(editor, '/新文件夾名(或默認)/'); 
</script> 

現在在打開編輯器的圖片、鏈接、flash,窗口就多了一個上傳選項卡,可以選擇上傳,還提供了瀏覽功能。 
因為涉及到文件夾的訪問權限,功能與我的網站需求不符,所以我沒有使用它提供的默認上傳,對他進行了修改。 
上傳方式的修改 
我的圖片服務器是image.tiyu.cc而網站的服務器是http://www.survivalescaperooms.com/,也不需要它提供的瀏覽功能,而且除了圖片上傳,不允許上傳其他的文件。 
這樣就需要有三個地方需要修改,1.修改默認上傳2.取消瀏覽功能3.取消文件、flash上傳功能。 
CKeditor的上傳路徑設置在/CKfinder/ckfinder.js中,有一項設置是CKFinder.SetupCKEditor,它的下面有以下代碼,可以設置是否需要圖片、文件、flash的瀏覽路徑以及上傳路徑。 
復制代碼代碼如下:

//設置文件的瀏覽路徑 
editorObj.config.filebrowserBrowseUrl = url ; 
//設置圖片的瀏覽路徑 
editorObj.config.filebrowserImageBrowseUrl = url + qs + 'type=' + ( imageType || 'Images' ) ; 
//設置flash文件瀏覽路徑 
editorObj.config.filebrowserFlashBrowseUrl = url + qs + 'type=' + ( flashType || 'Flash' ) ; 
//設置文件上傳文件地址 
editorObj.config.filebrowserUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector." 
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=Files" ; 
//設置圖片文件上傳地址 
editorObj.config.filebrowserImageUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector." 
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( imageType || 'Images' ) ; 
//設置flash文件上傳地址 
editorObj.config.filebrowserFlashUploadUrl = dir + "core/connector/" + ckfinder.ConnectorLanguage + "/connector." 
+ ckfinder.ConnectorLanguage + "?command=QuickUpload&type=" + ( flashType || 'Flash' ) ; 

根據CKeditor是根據上傳路徑的有無來控制是否顯示相應的上傳標簽,瀏覽按鈕也是。 
根據上面的需求,設置如下: 
復制代碼代碼如下:

//設置文件的瀏覽路徑 
editorObj.config.filebrowserBrowseUrl = ""; 
//設置圖片的瀏覽路徑 
editorObj.config.filebrowserImageBrowseUrl = ""; 
//設置flash文件瀏覽路徑 
editorObj.config.filebrowserFlashBrowseUrl = ""; 
//設置文件上傳文件地址 
editorObj.config.filebrowserUploadUrl = ""; 
//設置圖片文件上傳地址 
editorObj.config.filebrowserImageUploadUrl = "新地址"; 
//設置flash文件上傳地址 
editorObj.config.filebrowserFlashUploadUrl = ""; 

設置到這里再次打開編輯器的相應窗口就會發現除了圖片上傳按鈕外其他的瀏覽上傳都隱藏掉了。

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

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

其中fnID是調用的實際方法的編號,不同的瀏覽器,CKeditor調用不同的方法。 

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

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

FileUrl、Message,可以只有一個,也可以同時存在。Message主要應用于上傳失敗時的提示信息。 

關于fnID,這個具體的說明不是很清楚,但是通過代碼發現FF瀏覽器它的值是2,其他的瀏覽器是1,通過這個可以得出結論是,通過它來告知CKeditor來調用哪個方法接受上傳反饋信息。 

這個值,可以通過我們自己的程序去獲得。但是更好的方式是CKeditor給我們提供的值,當我們設置editorObj.config.filebrowserImageUploadUrl = "新地址"時CKeditor會自動為我們增加幾個個url參數: 
新地址?CKEditor=Text&CKEditorFuncNum=2&langCode=zh-cn 
其中CKEditorFuncNum就是我們需要的fnID,我們可以直接獲取到,然后反饋回來就好了。 

如果選擇跨域上傳,只需要在當前域(http://www.survivalescaperooms.com/)設置一個GetFile.aspx他有三個參數,分別是接受fnID,FileUrl、Message這三個值,在我們的editorObj.config.filebrowserImageUploadUrl中設置成http://Image.vevb.com/upfile.aspx?backUrl=http://www.survivalescaperooms.com/GetFile.aspx,就可以了,image.vevb.com域的upfile.aspx接受到文件,處理完成之后: 
復制代碼代碼如下:

ImageUrl="http://image.vevb.com/UpFile/2009/11/1/2009111201346_695.jpg" 
Message="根據錯誤與否,設置,沒有錯誤可以為空" 
CKEditorFuncNum=request("CKEditorFuncNum") 
response.Redirect("http://www.survivalescaperooms.com/GetFile.php?ImageUrl="+ ImageUrl + "&Message=" + Message + "&CKEditorFuncNum=" + CKEditorFuncNum) 


搞定,收工,睡覺,做個好夢。


注:相關教程知識閱讀請移步到編輯器頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 丹阳市| 蒙阴县| 桐乡市| 抚州市| 泸水县| 白城市| 曲阜市| 全椒县| 都兰县| 巴彦淖尔市| 大田县| 颍上县| 太康县| 灌南县| 贵州省| 阿克苏市| 镇原县| 临湘市| 吴川市| 平邑县| 合川市| 邢台县| 玛沁县| 吉隆县| 舞阳县| 海门市| 华阴市| 浮梁县| 邹平县| 金沙县| 绥阳县| 安乡县| 小金县| 青岛市| 儋州市| 民县| 阿拉尔市| 兴业县| 阳信县| 那坡县| 布拖县|