1. CKEditor5基本介绍

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,基本使用代码如下:

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

} );

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. 总结

因本人也是前端初学者,如果教程有错误和不足之处,还请海涵并帮忙指出改正,谢谢!

ckeditor5加字数_CKEditor5基本使用相关推荐

  1. ckeditor5加字数_ckeditor字数限制

    var maxlength = 200; _editor=CKEDITOR.replace("ckeditor",{height:'130px'}); _editor.on('ke ...

  2. 期刊论文发表的字数不够怎么办

    期刊论文发表的字数不够怎么办?发表论文是一件很有难度的事,不少作者绞尽脑汁该写的都写了,论文字数就是不达标,为大家介绍字数不够我们怎么办!一起来看看吧. 第一个方法就是从正文去加字数,正文加字很多同学 ...

  3. 职称论文发表的字数不够怎么办

    职称论文发表的字数不够怎么办?论文发表是一件很有难度的事,有的作者绞尽脑汁该写的都写了,论文字数就是不达标,下面小编为大家介绍字数不够我们怎么办!一起来看看吧. 第一个方法就是从正文去加字数,正文加字 ...

  4. poj-1159 Palindrome **

    1 /* 2 * DA-term-Palindrome.cpp 3 * 4 * DP 5 * 6 * 动态规划求解. 7 8 设ch[1]..ch[n]表示字符串1至n位,i为左游标,j为右游标 ,则 ...

  5. 数学小白的探索-欧拉和费马

    文章目录 一些数学趣史 关于欧拉猜想以及欧拉公式 费马大定理特殊情况最简单证明 题外话-三千年一遇的一元二次方程解法 写在最后 一些数学趣史 很久没有发表文章了,也许是最近闲的让一向数学其差的我没事看 ...

  6. 5首页加载慢_5个 外贸建站谷歌SEO优化技巧

    外贸建站谷歌SEO优化技巧 想必是每个外贸建站人员真正关心并且想要熟练掌握的一门学问.同学们可能在很多网站或者博客上看到过相同标题的博客文章,这些文章质量参差不齐内容多种多样,所表达的观点和相关技巧难 ...

  7. 将Doc或者Docx文档处理成html的代码逻辑;统计word中的字数,段数,句数,读取word中文档内容的代码逻辑...

    将Doc或者Docx文档处理成html的代码逻辑 下面是maven的配置代码: <!-- 文档处理所需的jar的依赖 --><dependency><groupId> ...

  8. 接到一个需求,想在页面上加一个链接有多难?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 程序师 来源 | www.techug.com ...

  9. android loadlibrary 更改libPath 路径,指定路径加载.so

    http://www.jianshu.com/p/f751be55d1fb 字数549 阅读177 评论0 喜欢0 需求很简单 ,就是加载指定文件夹下的.so. 原因:android在程序运行的状态下 ...

最新文章

  1. 使用Ansible批量部署SSH免密登录远程主机
  2. Faster R-CNN 英文论文翻译笔记
  3. SWIFT(Society for Worldwide Interbank Financial SWIFT Telecommunications---环球同业银行金融电讯协会)
  4. pandas之Series
  5. 显示三维图片序列_SLAM结合三维检测
  6. vue 文件导入服务器,Vue 如何import服务器上的js配置文件
  7. map排序;MD5加密
  8. DataGridView多线程更新数据的问题的解决办法
  9. 循环变量到底应该使用int还是unsigned int?
  10. 怎么修照片多余的部分_眉毛不会画怎么办?眉笔眉粉染眉膏到底怎么选?看完就会了...
  11. 精益思想,从哪里开始?
  12. 资源下载源码极致cms精纺资源网的模板整站源码
  13. 费曼学习法、卡片盒笔记法
  14. 区块链技术应用后,不再需要CA认证机构
  15. windows 7编辑启动菜单 bcdedit linux,bcdedit用法详解 windows7/vista启动修改
  16. linux 下通过 httpd服务创建网页
  17. matlab 分类学习工具箱 Classification Learner的使用及导出其生成的图,混淆矩阵confusion matrix的画法
  18. (附源码)anjule客户信息管理系统 毕业设计 181936
  19. 腾讯云安装配置数据库MySQL并且使用SQLyog连接
  20. 常见的无法上网故障原因和解决方法

热门文章

  1. Matlab语音信号频谱分析代码实现
  2. linux命令之查看程序动态库依赖-ldd
  3. OpenCV图像处理——深度学习样本制造
  4. Mysql 的 聚簇索引和二级索引
  5. 美团小程序框架mpvue入门教程
  6. linux 中使用 crontab 执行定时任务
  7. REST技术第四步 多个參数注解问题
  8. dojo中 xhr.post向后台传参出现乱码
  9. 编程语言圣经(卷一)
  10. docker——kafka-manager安装