CKEditor5基本使用

1. CKEditor5基本介紹

  1. CKEditor5的用法和CKEditor4.0版本完全不同,而網上幾乎沒有比較完整的教程,而官網教程又都是英語,比較難入門,所以在使用CKEditor5的時候踩了許多坑,把自己踩坑過程簡單寫一下。

2. 基本使用

1. 下載CKEditor5庫

官方教程有CDN,npm, Zip download三種獲取方式,但這三種方式獲取的都是打包精簡之后的版本,有一些文本編輯特性并沒有,如對齊方式、字體大小等。如要更靈活的根據自己的需求添加或刪減編輯器的特性,建議從CKEditor5官方Github下載。CKEditor5有多個版本,我使用的是從github下載的ckeditor5-build-classic版本。

2. 開始使用

目錄ckeditor5-build-classic-master\build下的ckeditor.js是打包好的庫,可以直接引用去使用。 新建一個editor.html,基本使用代碼如下:

 <div name="content" id="editor">
        <p></p>
 </div>
<script src="./ckeditor.js"></script>
<script>
    var data;
    ClassicEditor.create(document.querySelector('#editor'), {
            ckfinder: {
                uploadUrl: '/'
            }
        }
    ).then(editor => {
    window.editor = editor;
    data = editor.getData();
    console.log(data);
    } )
    .catch(error => {
        console.log(error);
    } );
</script>
3. 定制自己的CKEditor5: 增刪特性

雖然build目錄下的ckeditor.js可以直接使用,但是特性較少。下面開始定制自己的CKEditor5(注:本人對webpack打包不是很熟悉,本章節可能有問題,在打包使用過程遇到了問題,但用一些方法解決了)。
首先需要的工具: npm,webpack;
了解文件:webpack.config.js,package.json,build-config.js,src/ckeditor.js;

ckeditor5-build-classic目錄結構.png

webpack.config.js文件定義了打包的規則,package.json定義了用的包;build-config.js定義CKEditor5特性,src/ckeditor.js也是定義定義CKEditor5特性,似乎build-config.js和src/ckeditor.js只有一個就夠了,我使用的是src/ckeditor.js。
打包之后的工程上傳的Github,工程地址:https://github.com/Taoli96/CKEditor

3. 上傳圖片

1. 三種方法概述

官方教程中上傳圖片有三種方法(1):使用CKEditor自帶云服務,圖片上傳到CKEditor服務器;(2):使用ckfinder框架,在初始化CKEditor時,需要定義 ckfinder的uploadUrl參數,參數為上傳到自己服務器的地址;(3)自己寫上傳功能,定義UploadAdapter,實現upload()和 abort() 方法,并對UploadAdapter進行調用。
方法1大家幾乎不用,方法3要自己寫上傳功能,網上有個教程寫得不是很清楚,我也沒有很看懂,還存在疑問。代碼如下:

 class UploadAdapter {
        constructor(loader) {
            this.loader = loader;
        }
        upload() {
            return new Promise((resolve, reject) => {
            const data = new FormData();
            data.append('upload', this.loader.file);
            data.append('allowSize', 10);//允許圖片上傳的大小/兆
            $.ajax({
                url: '/QingXiao/Article/uploadArticleImage4',
                type: 'POST',
                data: data,
                dataType: 'json',
                processData: false,
                contentType: false,
                success: function (data) {
                    if (data.res) {
                        resolve({
                            default: data.url
                        });
                    } else {
                        reject(data.msg);
                    }

                }
            });

        });
        }
        abort() {
        }
    }

// 加載了適配器
    editor.plugins.get('FileRepository').createUploadAdapter = (loader)=>{
        return new UploadAdapter(loader);
    };
2. 上傳圖片方法2詳解

網上有網友遇到用方法2上傳圖片,遇到一個奇葩問題:圖片明明已經上傳到服務器,返回數據也是按照所謂教程的{"default":"url"}格式。可是依然會報錯。報錯如下:

上傳圖片報錯.png

我也遇到了這個問題,遲遲沒有解決,直到今天看了CKEditor中ckfinder的源碼才發現問題。閱讀ckeditor5-adapter-ckfinder發現,ckfinder也定義了UploadAdapter,同樣實現了upload()和 abort() 方法。而問題就出現在upload()方法中。下面貼出upload()方法的源碼:

upload() {
        return new Promise( ( resolve, reject ) => {
            this._initRequest();
            this._initListeners( resolve, reject );
            this._sendRequest();
        } );
    }

_initListeners( resolve, reject ) {
        const xhr = this.xhr;
        const loader = this.loader;
        const t = this.t;
        const genericError = t( 'Cannot upload file:' ) + ` ${ loader.file.name }.`;

        xhr.addEventListener( 'error', () => reject( genericError ) );
        xhr.addEventListener( 'abort', () => reject() );
        xhr.addEventListener( 'load', () => {
            const response = xhr.response;

            if ( !response || !response.uploaded ) {
                return reject( response && response.error && response.error.message ? response.error.message : genericError );
            }

            resolve( {
                default: response.url
            } );
        } );

        // Upload progress when it's supported.
        /* istanbul ignore else */
        if ( xhr.upload ) {
            xhr.upload.addEventListener( 'progress', evt => {
                if ( evt.lengthComputable ) {
                    loader.uploadTotal = evt.total;
                    loader.uploaded = evt.loaded;
                }
            } );
        }
    }

從上面源碼中可以發現,ckfinder請求之后的返回體response應該不為空,且還要包括uploaded和url字段,所以返回數據實際格式應該是{"uploaded":1,"url":"/"},如此就不會出錯了。所以,返回的數據并不是按照“教程“”說的那樣。

4. 總結

因本人也是前端初學者,如果教程有錯誤和不足之處,還請海涵并幫忙指出改正,謝謝!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,345評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,494評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,283評論 0 374
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,953評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,714評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,186評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,255評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,410評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,940評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,776評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,976評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,518評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,210評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,642評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,878評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,654評論 3 391
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,958評論 2 373

推薦閱讀更多精彩內容