注:使用CKEditor版本爲js版本的CKEditor 4,全部配置均參考自CKEditor官方API:http://docs.ckeditor.com/,以及實踐經驗javascript
// 當此文件載入完畢以後,CKEditor的JavaScript API就已準備就緒,可使用 <script src="ckeditor/ckeditor.js"></script>
// 在須要使用編輯器的地方插入textarea標籤 <textarea name="editor" id="editor"></textarea> CKEDITOR.replace('editor');
具體示例:html
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提供的config.js文件,文件所在目錄跟ckeditor.js的文件在同一目錄下:java
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的地方配置:ajax
// 以對象方式做爲配置參數 CKEDITOR.replace('editor', { uiColor: '#ffccdd' });
還有一種配置方式是直接更改CKEditor源碼進行配置,這種方式破壞了CKEditor原有的數據,我的認爲,實在不該該,這裏不對其進行介紹。有興趣的能夠本身研究。跨域
方法一:使用工具欄配置程序,經過界面操做自動生成,配置程序在ckeditor下的sample文件夾內,點擊index.html便可啓動數組
也能夠點擊上方的Basic-Advanced開關按鈕進行生成配置:瀏覽器
config.toolbar = [ [ 'Source' ], [ 'Cut', 'Undo' ] ];
當在使用CKEditor的時候,即便咱們的工具欄中有圖片上傳的工具,但打開的時候卻沒有上傳的頁籤,只有一個圖片詳細信息的頁面網絡
這個是由於咱們沒有配置圖片上傳路徑所致使的,即沒有配置filebrowserImageUploadUrl,加上這個配置就會出現其餘的頁籤編輯器
<textarea id='editor'>Test Data</textarea>
解決方式二:ide
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使用的粗淺看法,有錯漏之處敬請指出,共同探討!