ckeditor image上传js 修改成plugin的方法

在上一个文章中,介绍了自己写的一个image上传的ckeditor的 js的 扩展 ,发现在editor.destory();后在生成editor的时候,自己写的image上传的就调用不了了,没有自己查明原因,觉得可能是 CKEditor.on('pluginsLoad',function(){})的加载的问题,于是修改成了插件的方式。

 

建立步骤如下:

 

1.首先在ckeditor的plugins文件夹下面建立一个myAddImage文件夹,注意 最好文件夹得名字的大小写 ,如果你用是linux系统,那么如果把myAddImage 写成 myaddimage 那么ckeditor会获取不到,我在测试的时候就犯了这个错误。

2.在myAddImage文件夹下建立plugin.js文件。

  文件内容:

CKEDITOR.plugins.add( 'myAddImage',{
    init : function( editor )
    {   
       /*
       /* 获取CKEditorFuncNum
       */
       var getFuncNum = function(url) {
          var reParam = new RegExp('(?:[\?&]|&)CKEditorFuncNum=([^&]+)', 'i') ;
          var match = url.match(reParam) ;
          return (match && match.length > 1) ? match[1] : '' ;
        };
       /*
       /*  iframe onload处理 
        *  这段可以放在外面,根据不同的返回值自行进行处理
        */
        var getAjaxResult = function (t){
            var _id = this.getId();
            var _doc = this.getFrameDocument();
            //获取页面返回值
            var data = _doc.getBody().getHtml();
            //firebrowser的处理
            CKEDITOR.tools.callFunction(t.listenerData, data);
            this.removeListener('load', getAjaxResult);
        }

        CKEDITOR.dialog.add( 'myAddImage', function( editor )
        {
            return {
                    title : '添加图片',
                    minWidth : 400,
                    minHeight : 200,
                    contents : 
                    [
                        {
                            id : 'addImage',
                            label : '添加图片',
                            title : '添加图片',
                            filebrowser : 'uploadButton',
                            elements :
                            [
                              {    
                                  id : 'txtUrl',
                                  type : 'text',
                                  label : '图片网址',
                                  required: true
                              },
                              {
                                    id : 'photo',
                                    type : 'file',
                                    label : '上传图片',
                                    style: 'height:40px',
                                    size : 38
                              },
                              {
                                   type : 'fileButton',
                                   id : 'uploadButton',
                                   label : '上传',
                                   filebrowser :
                                   {
                                        action : 'QuickUpload',
                                        target : 'addImage:txtUrl',
                                        onSelect:function(fileUrl, errorMessage){
                                            //在这里可以添加其他的操作
                                        }
                                   },
                                   onClick: function(){
                                        var d = this.getDialog();
                                        var _photo =  d.getContentElement('addImage','photo');
                                        _funcNum = getFuncNum(_photo.action);
                                        var _iframe =  CKEDITOR.document.getById(_photo._.frameId);
                                        //可以查看ckeditor.event doc 了解此段代码
                                        //http://docs.cksource.com/ckeditor_api/
                                        _iframe.on('load', getAjaxResult, _iframe, _funcNum);
                                   },
                                   'for' : [ 'addImage', 'photo']
                              }
                            ]
                        }
                   ],
                   onOk : function(){
                       _src = this.getContentElement('addImage', 'txtUrl').getValue();
                       if (_src.match(/(^\s*(\d+)((px)|\%)?\s*$)|^$/i)) {
                           alert('请输入网址或者上传文件');
                           return false;
                       }
                       this.imageElement = editor.document.createElement( 'img' );
                       this.imageElement.setAttribute( 'alt', '' );
                       this.imageElement.setAttribute( 'src', _src );
                       //图片插入editor编辑器
                       editor.insertElement( this.imageElement );
                   }
            };
        });
        editor.addCommand( 'myImageCmd', new CKEDITOR.dialogCommand( 'myAddImage' ) );
        editor.ui.addButton( 'AddImage',
        {
                label : '图片',
                icon:'images/images.jpg', //toolbar上icon的地址,要自己上传图片到images下
                command : 'myImageCmd'
        });
    },
    requires : [ 'dialog' ]
});
 

 

 可以看出和上个文章的myeditor.js 的代码与本文中CKEDITOR.dialog.add中没有什么区别。

 关于为什么要用额外的

getAjaxResult  

是因为有很多时候,我们的返回值不一定就直接是图片web地址,可能是json数据,要进行处理。

我没有发现firebrowser的

onSelect:function(fileUrl, errorMessage){
                                            //在这里可以添加其他的操作
                                        }

会有对目标(

 target : 'addImage:txtUrl',

的值的更新能够处理的,不论你在onselect中对fileUrl如何赋值,都不会影响txtUrl中的值。

 

3.就是外部如何调用这个plugin了

 

 var editor = CKEDITOR.replace( id,
 {
         extraPlugins : 'myAddImage', //就是这里
         toolbar : ['Source','-','Bold','Italic','Underline','Strike','-','Link','-','Unlink','-','AddImage'],
         filebrowserUploadUrl : '/upload.php'
 });
 

你也可以在config.js里面添加

 extraPlugins : 'myAddImage'

这句话

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值