注:使用CKEditor版本為js版本的CKEditor 4,所有配置均參考自CKEditor官方API:http://docs.ckeditor.com/,以及實踐經驗
一、快速使用
1、引入CKEditor的js文件
// 當此文件載入完畢之后,CKEditor的JavaScript API就已准備就緒,可以使用 <script src="ckeditor/ckeditor.js"></script>
2、頁面中使用CKEditor
// 在需要使用編輯器的地方插入textarea標簽 <textarea name="editor" id="editor"></textarea> CKEDITOR.replace('editor');
具體示例:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Learning CKEditor</title> 6 </head> 7 <body> 8 <textarea name="editor" id="editor" cols="30" rows="10"></textarea> 9 <script type="text/javascript" src="ckeditor/ckeditor.js"></script> 10 <script type="text/javascript"> 11 CKEDITOR.replace('editor'); 12 </script> 13 </body> 14 </html>
二、CKEditor的配置
配置方法一:
使用CKEditor提供的config.js文件,文件所在目錄跟ckeditor.js的文件在同一目錄下:
1 // 直接將配置內容寫在function函數內即可 2 CKEDITOR.editorConfig = function( config ) { 3 config.uiColor = '#f1e4db'; 4 config.height = 200; 5 config.removePlugins = 'elementspath,resize'; // 移除編輯器底部狀態欄顯示的元素路徑和調整編輯器大小的按鈕 6 config.allowedContent = false; // 是否允許使用源碼模式進行編輯 7 config.forcePasteAsPlainText = true; // 是否強制復制過來的文字去除格式 8 config.enterMode = CKEDITOR.ENTER_BR; // 編輯器中回車產生的標簽CKEDITOR.ENTER_BR(<br>),CKEDITOR.ENTER_P(<p>),CKEDITOR_ENTER(回車) 9 // 設置快捷鍵 10 // 用於實現Ctrl + V進行粘貼 11 // 無此配置,無法進行快捷鍵粘貼 12 config.keystrokes = [ 13 [CKEDITOR.CTRL + 86 /* V */, 'paste'] 14 ]; 15 16 // 設置快捷鍵,可能與瀏覽器沖突plugins/keystrokes/plugin.js 17 // 用於實現Ctrl + V進行粘貼 18 // 此配置將會啟動粘貼之前進行過濾,若無此配置,將會出現粘貼之后才彈出過濾框 19 config.blockedKeystrokes = [ 20 CKEDITOR.CTRL + 86 21 ]; 22 23 // 圖片上傳相關 24 config.filebrowserImageUploadUrl = './upload'; // 圖片上傳路徑 25 config.image_previewText = ' '; // 圖片信息面板預覽區內容的文字內容,默認顯示CKEditor自帶的內容 26 config.removeDialogTabs = 'image:advanced;image:Link'; // 移除圖片上傳頁面的'高級','鏈接'頁簽 27 }
配置方法二:
直接在使用CKEditor的地方配置:
// 以對象方式作為配置參數 CKEDITOR.replace('editor', { uiColor: '#ffccdd' });
還有一種配置方式是直接更改CKEditor源碼進行配置,這種方式破壞了CKEditor原有的數據,個人認為,實在不應該,這里不對其進行介紹。有興趣的可以自己研究。
CKEditor工具欄配置
方法一:使用工具欄配置程序,通過界面操作自動生成,配置程序在ckeditor下的sample文件夾內,點擊index.html即可啟動

也可以點擊上方的Basic-Advanced開關按鈕進行生成配置:
config.toolbar = [ [ 'Source' ], [ 'Cut', 'Undo' ] ];
關於圖片上傳的問題
當在使用CKEditor的時候,即使我們的工具欄中有圖片上傳的工具,但打開的時候卻沒有上傳的頁簽,只有一個圖片詳細信息的頁面
這個是因為我們沒有配置圖片上傳路徑所導致的,即沒有配置filebrowserImageUploadUrl,加上這個配置就會出現其他的頁簽
關於CKEditor賦值問題
<textarea id='editor'>Test Data</textarea>
解決方式二:
CKEditor = CKEDITOR.replace('editor'); // 添加instanceReady事件 CKEditor.on('instanceReady',function(data) { CKEditor.setData(data); }
以上方式能夠較好的解決CKEditor的賦值問題
BUT,方式二還是會出現問題:instanceReady事件只會觸發一次,那就是在CKEditor實例創建完畢之后便觸發,若我是在實例創建之后的一段時間,即是在事件觸發時間之后才對其進行賦值,那么賦值一樣會失敗,事件觸發的時候,data數據是空的。
那這時候應該怎么辦呢?將instanceReady事件和.setData()方法直接結合起來使用,像這樣
1 // 添加instanceReady事件 2 CKEditor.on('instanceReady',function(data) { 3 CKEditor.setData(data); 4 } 5 CKEditor.setData(data);
解決方式三:
1 var waitCKEditorReady = function(data) { 2 if(CKEditor.status == 'ready') { 3 CKEditor.setData(data); 4 } else { 5 setTimeout(function() { 6 waitCKEditorReady(data); 7 }, 20); 8 } 9 } 10 setTimeout(function() { 11 waitCKEditorReady('Test Data'); 12 }, 50);
網絡上對於以上提出的一些問題,處理方式大都是直接去修改部分CKEditor的源碼。個人認為,這雖然也是一種方式,但卻不是好的做法,較好的做法應該是根據現有的資源在不改動源碼的前提下對CKEditor進行更改,或者寫個自己的插件對CKEditor進行拓展。而這也不該僅僅局限於CKEditor,而該是對所有的庫進行這樣的做法。
以上為本人對於CKEditor使用的粗淺見解,有錯漏之處敬請指出,共同探討!