手把手教你 CKEDITOR 4 扩展插件制作


Posted in Javascript onJune 18, 2019

本文实例讲述了CKEDITOR 4 扩展插件制作。分享给大家供大家参考,具体如下:

今天让我们来探索一下ckeditor的扩展功能,换句话说就是自定义按钮,以及点击按钮之后实现的功能。

要实现自定义按钮,我们要做几个事情:

  • 1、准备一个图标,最好是16*16大小的png格式图片,你没有的话,姜哥帮你准备了一张手把手教你 CKEDITOR 4 扩展插件制作
  • 2、在plugins目录下建立我们和自定义插件同名的目录,并且在里面建立一个叫plugin.js的文件。
  • 3、在我们自己的插件目录中,建立一个dialogs目录,并且在里面新建一个与我们插件同名的js文件,实现插件的功能。

动手!

1、建立相应的文件夹和文件,姜哥在ckeditor/plugins/下新建了一个myplug目录,将来我的插件就叫myplug

手把手教你 CKEDITOR 4 扩展插件制作

2、编辑plugin.js文件,填入以下内容,特别要注意里面的名字前后保持一致,后期运行有问题,多半是名字写错了:

(function(){
 //Section 1 : 按下自定义按钮时执行的代码
 var a= {
  exec:function(editor){
   alert("This a custome button!");
  }
 },
 //Section 2 : 创建自定义按钮、绑定方法
 b='myplug'; //注意myplug名字
 CKEDITOR.plugins.add(b,{
  init:function(editor){
   CKEDITOR.dialog.add('myplugDialog', this.path + 'dialogs/myplug.js'); //注意myplug名字
   editor.addCommand('myplug', new CKEDITOR.dialogCommand('myplugDialog')); //注意myplug名字
   //注意myplug名字 和 图片路径
   editor.ui.addButton('myplug',{
    label:'打开我的插件',
    icon: this.path + 'myplug.png',
    command:b
   });
  }
 });
})();

3、配置config.js中的toolbar,将自定义插件显示出来:

CKEDITOR.editorConfig = function( config ) {
 config.extraPlugins="myplug"; //增加了我们的自定义插件
 config.toolbar = 'Full';
 config.toolbar_Full =
 [
  { name: 'custome_plugin', items : [ 'myplug'] }, //将自定义插件加入toolbar
  { name: 'insert', items : [ 'upload','album','-','Table' ] },
  { name: 'clipboard', items : [ 'Cut','Copy','Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
  { name: 'basicstyles', items : [ 'Bold','Italic','Underline','Strike','Subscript','Superscript' ] },
  { name: 'paragraph', items : [ 'NumberedList','BulletedList','-','-','Blockquote',
  '-','JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock' ] },
  { name: 'colors', items : [ 'TextColor','BGColor' ] },
  { name: 'document', items : [ 'Source' ] },
 ];
};

在这里我们只加了两行,一行是config.extraPlugins="myplug";这个向ckeditor注册了我们的自定义插件,告诉ckeditor还有我们的这个myplug这么个东西;另一行是{ name: 'custome_plugin', items : [ 'myplug'] },用来配置toolbar,让ckeditor将我们的按钮显示出来,注意后面的逗号,不要漏了噢。

保存之后,看一下运行效果,图标出来了,可是点击以后一闪而过,那是因为我们还没有开发对应的dialog代码:

手把手教你 CKEDITOR 4 扩展插件制作

注意:如果大家这一步失败了,可以尝试从两个方面排查:

①、前面我一再强调的,名字有没有弄错;
②、也许是文件编码的问题,尝试把所有的中文都删掉,换成英文试试。

4、开发dialogs/myplug.js,实现业务功能

myplug/dialogs/新建一个叫myplug.js的文件,这个其实和前面一步中,plugin.js文件中的这一行是对应的:

CKEDITOR.dialog.add('myplugDialog', this.path + 'dialogs/myplug.js'); //注意myplug名字

在那个文件中,其实指定了我们dialog文件的目录和文件名,理论上是可以随意的,但是为了容易管理,墙裂建议大家搞成一样的,不要给自己制造麻烦~来看一下,我们要在myplug.js里写什么:

(function () {
  function myplugDialog(editor) {
  return {
   title: 'Who does you want to say hello?', //窗口标题
   minWidth: 300,
   minHeight: 80,
   buttons: [{
    type: 'button',
    id: 'someButtonID',
    label: 'Button',
    onClick: function () {
     alert('This is a custome button');
    }
    //对话框底部的自定义按钮
   },
   CKEDITOR.dialog.okButton, //对话框底部的确定按钮
   CKEDITOR.dialog.cancelButton], //对话框底部的取消按钮
   contents:      //每一个contents在对话框中都是一个tab页
   [
    {
     id: 'user',   //contents的id
     label: 'You name',
     title: 'You name',
     elements:    //定义contents中的内容,我们这里放一个文本框,id是name
     [
      {
       id: 'name',
       type: 'text',
       style: 'width: 50%;',
       label: 'You name',
      }
     ]
    }
   ],
   onLoad: function () {
    //alert('onLoad');
   },
   onShow: function () {
    //alert('onShow');
   },
   onHide: function () {
    //alert('onHide');
   },
   onOk: function () {
    //点击 确定 按钮之后触发的事件
    var name = this.getValueOf( 'user', 'name' );
    //从界面上取值的方法,getValueOf( 'contents的id', '控件的id' )
    editor.insertHtml('<p>' + name + ' : Hello world!' + '</p>');
    //将内容放入到editor
    this.commitContent();
   },
   onCancel: function () {
    //alert('onCancel');
   },
   resizable: CKEDITOR.DIALOG_RESIZE_HEIGHT
  };
 }
 CKEDITOR.dialog.add('myplugDialog', function (editor) {
  return myplugDialog(editor);
 });
})();

在上面这段程序里,我们首先定义了一个myplugDialog,并且给他设置了标题、最小宽度、最小高度,然后又添加了一个tab页,在里面放了一个对话框。在程序的底部,我们把这个对话框注册到ckeditor中去,这样前端点击按钮,才可以调用到这个对话框。

常见错误:

1、名字没有匹配,再次强调一下,这里面myplugDialog千万千万要前后一致,而且,要和plugin.js中的名称一致!

2、中文的问题,如果出现点击没有效果,大家可以首先尝试,将我这段代码中,所有的中文都删掉试试。或者用另外的方法,转换一下编码格式,在Notepad++中,可以这样:

手把手教你 CKEDITOR 4 扩展插件制作

用我标红的两个选项试试看,一般都是可以的,重新保存之后,再次运行:

手把手教你 CKEDITOR 4 扩展插件制作

点击我们的插件后,出来一个对话框,填入我的名字,姜哥,再按确定。

手把手教你 CKEDITOR 4 扩展插件制作

我们填入的内容就被插入到当前光标处了!

好了,今天我们学习了ckeditor的自定义插件,以及插件中内容的交互。内容还是比较多的,大家也可能会碰到各种问题,姜哥再这里再唠叨两句,问题一般都是两种原因引起的:

①、名称前后不一致;
②、中文编码格式引起的乱码。

完整实例代码点击此处本站下载

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
两个Javascript小tip资料
Nov 23 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
星期几的不同脚本写法(推荐)
Jun 01 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
Oct 27 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
Feb 16 Javascript
mui上拉加载更多下拉刷新数据的封装过程
Nov 03 Javascript
layui点击按钮添加可编辑的一行方法
Aug 15 Javascript
浅析Proxy可以优化vue的数据监听机制问题及实现思路
Nov 29 Javascript
详解javascript设计模式三:代理模式
Mar 25 Javascript
webpack4 配置 ssr 环境遇到“document is not defined”
Oct 24 Javascript
JS实现随机点名器
Apr 12 Javascript
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 Vue.js
Typescript 中的 interface 和 type 到底有什么区别详解
Jun 18 #Javascript
使用js在layui中实现上传图片压缩
Jun 18 #Javascript
jquery中为什么能用$操作
Jun 18 #jQuery
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 #Javascript
利用js-cookie实现前端设置缓存数据定时失效
Jun 18 #Javascript
vue中利用Promise封装jsonp并调取数据
Jun 18 #Javascript
实用Javascript调试技巧分享(小结)
Jun 18 #Javascript
You might like
php设计模式 Observer(观察者模式)
2011/06/26 PHP
php启动时候提示PHP startup的解决方法
2013/05/07 PHP
thinkphp的URL路由规则与配置实例
2014/11/26 PHP
php自定义排序uasort函数示例【二维数组按指定键值排序】
2019/06/19 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
多浏览器支持的右下角浮动窗口
2010/04/01 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
JavaScript中getUTCMinutes()方法的使用详解
2015/06/10 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
微信小程序出现wx.getLocation再次授权问题的解决方法分析
2019/01/16 Javascript
JS获取本地地址及天气的方法实例小结
2019/05/10 Javascript
element-ui 实现响应式导航栏的示例代码
2020/05/08 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
举例详解Python中threading模块的几个常用方法
2015/06/18 Python
Python抓取电影天堂电影信息的代码
2016/04/07 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
Python编程实现tail-n查看日志文件的方法
2019/07/08 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
Django 实现将图片转为Base64,然后使用json传输
2020/03/27 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
HTML5之HTML元素扩展(下)—增强的Form表单元素值得关注
2013/01/31 HTML / CSS
使用html5 canvas 画时钟代码实例分享
2015/11/11 HTML / CSS
教育科学研究生自荐信
2013/10/09 职场文书
护理毕业生自荐信范文
2013/12/22 职场文书
主持人演讲稿范文
2013/12/28 职场文书
获奖的大学生创业计划书
2014/01/05 职场文书
学生会主席就职演讲稿
2014/01/14 职场文书
父母对孩子说的话
2014/04/12 职场文书
会计系毕业生求职信
2014/05/28 职场文书
文艺演出策划方案
2014/06/07 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书