手把手教你 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 相关文章推荐
用正则xmlHttp实现的偷(转)
Jan 22 Javascript
file模式访问网页时iframe高度自适应解决方案
Jan 16 Javascript
jquery图形密码实现方法
Mar 11 Javascript
浅谈jQuery.easyui的datebox格式化时间
Jun 25 Javascript
bootstrap网页框架的使用方法
May 10 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
May 15 Javascript
jQuery回到顶部的代码
Jul 09 Javascript
一次围绕setTimeout的前端面试经验分享
Jun 15 Javascript
Node.js实现文件上传的示例
Jun 28 Javascript
ionic3实战教程之随机布局瀑布流的实现方法
Dec 28 Javascript
vue-cli配置flexible过程详解
Jul 04 Javascript
JS数据类型判断的几种常用方法
Jul 07 Javascript
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
域名和cookie问题(域名后缀)
2012/10/10 PHP
php实现telnet功能示例
2014/04/08 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
脚本吧 - 幻宇工作室用到js,超强推荐base.js
2006/12/23 Javascript
基于jQuery的message插件实现右下角弹出消息框
2011/01/11 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
了不起的node.js读书笔记之node的学习总结
2014/12/22 Javascript
JS实现定时自动关闭DIV层提示框的方法
2015/05/11 Javascript
jQuery实现为控件添加水印文字效果(附源码)
2015/12/02 Javascript
剖析Node.js异步编程中的回调与代码设计模式
2016/02/16 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
javascript图片预览和上传(兼容IE)
2017/03/15 Javascript
vue.js 使用v-if v-else发现没有执行解决办法
2017/05/15 Javascript
详解使用nvm安装node.js
2017/07/18 Javascript
详解react-native WebView 返回处理(非回调方法可解决)
2018/02/27 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
微信小程序封装的HTTP请求示例【附升级版】
2019/05/11 Javascript
jQuery 选择器用法实例分析【prev + next】
2020/05/22 jQuery
Python使用cx_Oracle模块将oracle中数据导出到csv文件的方法
2015/05/16 Python
解读Django框架中的低层次缓存API
2015/07/24 Python
利用Python代码实现数据可视化的5种方法详解
2018/03/25 Python
Python格式化输出%s和%d
2018/05/07 Python
python如何实现一个刷网页小程序
2018/11/27 Python
详解PyQt5中textBrowser显示print语句输出的简单方法
2020/08/07 Python
python实现sm2和sm4国密(国家商用密码)算法的示例
2020/09/26 Python
CSS3制作文字半透明倒影效果的两种实现方式
2014/08/08 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
盛大二次面试题
2016/11/18 面试题
最新计算机专业自荐信
2013/10/16 职场文书
农民工讨薪标语
2014/06/26 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
行政前台岗位职责
2015/04/16 职场文书
汽车车尾标语大全
2015/08/11 职场文书
vue backtop组件的实现完整代码
2021/04/07 Vue.js
Go语言实现Base64、Base58编码与解码
2021/07/26 Golang
Redis入门基础常用操作命令整理
2022/06/01 Redis