热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ckeditor自己写的一个简单的image上传js运用iframe的ajax上传

ckeditor最近修改一个上传的,原来的Image的上传插件功能很多,但是自己用,没有必要,就进行了修改,后来就改成了目前的样子,根据_samplesapi_dialog.htm

ckeditor最近修改一个上传的,原来的Image的上传插件功能很多,但是自己用,没有必要,就进行了修改,后来就改成了目前的样子,根据_samples/api_dialog.html 进行了修改,把页面里面的调用都进行了修改.

1.添加网址和上传在一个tab中

2.图片上传之后会直接把生成的值放到图片网址的input中。

ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
1.index.html调用页面

 

Index.html代码 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  1. "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">   
  2. "http://www.w3.org/1999/xhtml">   
  3.   
  4.        
  5.     "text/html; charset=utf-8" http-equiv="content-type" />   
  6.        
  7.        
  8.   
  9.   
  10.     

      

  11.         CKEditor Sample   
  12.        
  13.     "80" id="editor1" name="editor1" rows="10">

    This is some sample text. You are using "http://ckeditor.com/">CKEditor.

      
  14.        
  15.   
  16.   


	
	
	
	


	

CKEditor Sample

 

2. mydialog.js

 

Js代码 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  1. //外部调用函数   
  2. function makeEditor(id) {   
  3.     CKEDITOR.on( 'dialogDefinition'function( ev )   
  4.     {   
  5.             var dialogName = ev.data.name;   
  6.             var dialogDefinition = ev.data.definition;   
  7.             if ( dialogName == 'link' )   
  8.             {   
  9.                     var infoTab = dialogDefinition.getContents( 'info' );   
  10.                     //删除不要的标签页中选项   
  11.                     infoTab.remove( 'linkType' );   
  12.                     infoTab.remove( 'browse' );   
  13.                     var urlField = infoTab.get( 'url' );   
  14.                     //更改链接的文字   
  15.                     urlField['label'] = '链接地址';   
  16.                     //删除不要的tab标签页   
  17.                     dialogDefinition.removeContents( 'target' );   
  18.                     dialogDefinition.removeContents( 'advanced' );   
  19.                     //由于filebrowserUploadUrl的使用,删除链接dialog中出现的upload标签页   
  20.                     dialogDefinition.removeContents( 'upload' );   
  21.             }   
  22.     });   
  23.     var editor = CKEDITOR.replace( id,   
  24.     {   
  25.         toolbar : [[ 'Source','-','Bold','Italic','Underline','Strike','-','Link','-','Unlink','-','AddImage']],   
  26.         //引入上传   
  27.         filebrowserUploadUrl : 'http://127.0.0.1/editor/upload.php'  
  28.     });   
  29.     editor.on( 'pluginsLoaded'function( ev )   
  30.     {   
  31.         if ( !CKEDITOR.dialog.exists( 'myAddImage' ) )   
  32.         {   
  33.                 //生成调用js的地址 窗体函数   
  34.                 var href = 'http://' + window.location.host + '/editor/myAddImage.js';   
  35.                 CKEDITOR.dialog.add( 'myAddImage', href );   
  36.         }   
  37.         editor.addCommand( 'myImageCmd'new CKEDITOR.dialogCommand( 'myAddImage' ) );   
  38.         editor.ui.addButton( 'AddImage',   
  39.         {   
  40.                 label : '图片',   
  41.                 icon:'images/images.jpg'//增加按钮图标   
  42.                 command : 'myImageCmd'  
  43.         });   
  44.     });   
  45. }   
  46.   
  47. //获取CKEditorFuncNum的值   
  48. function getUrlParam(url)   
  49. {   
  50.   var reParam = new RegExp('(?:[\?&]|&)CKEditorFuncNum=([^&]+)''i') ;   
  51.   var match = url.match(reParam) ;   
  52.     
  53.   return (match && match.length > 1) ? match[1] : '' ;   
  54. }   
  55. /*  
  56.  * iframe的onload  
  57.  * params:  
  58.  *        t   obj iframe  
  59.  *        num int anonymous function number used to pass the url of a file to CKEditor (random number)  
  60.  */  
  61. function iframeLoad(t, num){   
  62.     t.style.display = 'none';   
  63.     var ret = t.contentWindow.document.body.innerHTML;   
  64.     var fchild = t.contentWindow.document.body.firstChild;   
  65.     // fchild.nodeType { 1 => form, 3 => textNode}    
  66.     if (fchild.nodeType == 3) {   
  67.         //我返回的ret是json数据,进行处理   
  68.         var data = eval("("+ret+")");    
  69.         if(data.picurl) {    
  70.             picurl = data.picurl;   
  71.             //触发filebrowser   
  72.             CKEDITOR.tools.callFunction(num, picurl);   
  73.         } else if(data.error) {    
  74.             CKEDITOR.tools.callFunction(num, '''上传失败'+data.error);   
  75.         }      
  76.     }   
  77.     t.style.display = '';   
  78. }  
//外部调用函数
function makeEditor(id) {
    CKEDITOR.on( 'dialogDefinition', function( ev )
    {
            var dialogName = ev.data.name;
            var dialogDefinition = ev.data.definition;
            if ( dialogName == 'link' )
            {
                    var infoTab = dialogDefinition.getContents( 'info' );
                    //删除不要的标签页中选项
                    infoTab.remove( 'linkType' );
                    infoTab.remove( 'browse' );
                    var urlField = infoTab.get( 'url' );
                    //更改链接的文字
                    urlField['label'] = '链接地址';
                    //删除不要的tab标签页
                    dialogDefinition.removeContents( 'target' );
                    dialogDefinition.removeContents( 'advanced' );
                    //由于filebrowserUploadUrl的使用,删除链接dialog中出现的upload标签页
                    dialogDefinition.removeContents( 'upload' );
            }
    });
    var editor = CKEDITOR.replace( id,
    {
        toolbar : [[ 'Source','-','Bold','Italic','Underline','Strike','-','Link','-','Unlink','-','AddImage']],
        //引入上传
        filebrowserUploadUrl : 'http://127.0.0.1/editor/upload.php'
    });
    editor.on( 'pluginsLoaded', function( ev )
    {
        if ( !CKEDITOR.dialog.exists( 'myAddImage' ) )
        {
                //生成调用js的地址 窗体函数
                var href = 'http://' + window.location.host + '/editor/myAddImage.js';
                CKEDITOR.dialog.add( 'myAddImage', href );
        }
        editor.addCommand( 'myImageCmd', new CKEDITOR.dialogCommand( 'myAddImage' ) );
        editor.ui.addButton( 'AddImage',
        {
                label : '图片',
                icon:'images/images.jpg', //增加按钮图标
                command : 'myImageCmd'
        });
    });
}

//获取CKEditorFuncNum的值
function getUrlParam(url)
{
  var reParam = new RegExp('(?:[\?&]|&)CKEditorFuncNum=([^&]+)', 'i') ;
  var match = url.match(reParam) ;
 
  return (match && match.length > 1) ? match[1] : '' ;
}
/*
 * iframe的onload
 * params:
 *        t   obj iframe
 *        num int anonymous function number used to pass the url of a file to CKEditor (random number)
 */
function iframeLoad(t, num){
    t.style.display = 'none';
    var ret = t.contentWindow.document.body.innerHTML;
    var fchild = t.contentWindow.document.body.firstChild;
    // fchild.nodeType { 1 => form, 3 => textNode} 
    if (fchild.nodeType == 3) {
        //我返回的ret是json数据,进行处理
        var data = eval("("+ret+")"); 
        if(data.picurl) { 
            picurl = data.picurl;
            //触发filebrowser
            CKEDITOR.tools.callFunction(num, picurl);
        } else if(data.error) { 
            CKEDITOR.tools.callFunction(num, '', '上传失败'+data.error);
        }	
    }
    t.style.display = '';
}
 

3. myAddImage.js

 

Js代码 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  1. CKEDITOR.dialog.add( 'myAddImage'function( editor )   
  2. {   
  3.     var ADDIMAGE = 1,   
  4.     regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i;   
  5.     return {   
  6.             title : '添加图片',   
  7.             minWidth : 400,   
  8.             minHeight : 200,   
  9.             contents :    
  10.             [   
  11.                 {   
  12.                     id : 'addImage',   
  13.                     label : '添加图片',   
  14.                     title : '添加图片',   
  15.                     filebrowser : 'uploadButton',   
  16.                     elements :   
  17.                     [   
  18.                       {       
  19.                           id : 'txtUrl',   
  20.                           type : 'text',   
  21.                           label : '图片网址',   
  22.                           required: true  
  23.                       },   
  24.                       {   
  25.                             id : 'photo',   
  26.                             type : 'file',   
  27.                             label : '上传图片',   
  28.                             style: 'height:40px',   
  29.                             size : 38   
  30.                       },   
  31.                       {   
  32.                            type : 'fileButton',   
  33.                            id : 'uploadButton',   
  34.                            label : '上传',   
  35.                            filebrowser :   
  36.                            {   
  37.                                 action : 'QuickUpload',   
  38.                                 target : 'addImage:txtUrl'//更新的文本标签   
  39.                            },   
  40.                            onClick: function(){   
  41.                                 var d = this.getDialog();   
  42.                                 var _txtUrl = d.getContentElement('addImage','txtUrl');   
  43.                                 var _photo =  d.getContentElement('addImage','photo');   
  44.                                 var _frameId = _photo._.frameId;   
  45.                                 var _iframe =  CKEDITOR.document.getById(_frameId);   
  46.                                 //给iframe添加onload事件   
  47.                                 _iframe.setAttribute('onload',    
  48.                                         'getAjaxResult(this,'+getUrlParam(_photo.action)+')');   
  49.                            },   
  50.                            'for' : [ 'addImage''photo']   
  51.                       }   
  52.                     ]   
  53.                 }   
  54.            ],   
  55.            onOk : function(){   
  56.                _src = this.getContentElement('addImage''txtUrl').getValue();   
  57.                if (_src.match(regexGetSizeOrEmpty)) {   
  58.                    alert('请输入网址或者上传文件');   
  59.                    return false;   
  60.                }   
  61.                this.imageElement = editor.document.createElement( 'img' );   
  62.                this.imageElement.setAttribute( 'alt''' );   
  63.                this.imageElement.setAttribute( 'src', _src );   
  64.                editor.insertElement( this.imageElement );   
  65.            }   
  66.     };   
  67.  });  
CKEDITOR.dialog.add( 'myAddImage', function( editor )
{
    var ADDIMAGE = 1,
    regexGetSizeOrEmpty = /(^\s*(\d+)((px)|\%)?\s*$)|^$/i;
    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'//更新的文本标签
                           },
                           onClick: function(){
                                var d = this.getDialog();
                                var _txtUrl = d.getContentElement('addImage','txtUrl');
                                var _photo =  d.getContentElement('addImage','photo');
                                var _frameId = _photo._.frameId;
                                var _iframe =  CKEDITOR.document.getById(_frameId);
                                //给iframe添加onload事件
                                _iframe.setAttribute('onload', 
                                        'getAjaxResult(this,'+getUrlParam(_photo.action)+')');
                           },
                           'for' : [ 'addImage', 'photo']
                      }
                    ]
                }
           ],
           onOk : function(){
               _src = this.getContentElement('addImage', 'txtUrl').getValue();
               if (_src.match(regexGetSizeOrEmpty)) {
                   alert('请输入网址或者上传文件');
                   return false;
               }
               this.imageElement = editor.document.createElement( 'img' );
               this.imageElement.setAttribute( 'alt', '' );
               this.imageElement.setAttribute( 'src', _src );
               editor.insertElement( this.imageElement );
           }
    };
 });
 

4. upload.php页面,就直接返回了些数据,php的上传程序就略过了

 

Php代码 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传 ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  1. $str = '{"picurl":/l.jpg"}';   
  2. $str = '{"error":-304}';   
  3. echo $str;   
  4. ?>  
 

生成的dialog的样子和editor

 

 
ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传

 

  • ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  • 大小: 17.4 KB
  • ckeditor 自己写的一个简单的image上传js 运用iframe的ajax上传
  • 大小: 12.8 KB
  • editor.zip (330.5 KB)
  • 下载次数: 137

推荐阅读
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • 本文介绍了使用AJAX的POST请求实现数据修改功能的方法。通过ajax-post技术,可以实现在输入某个id后,通过ajax技术调用post.jsp修改具有该id记录的姓名的值。文章还提到了AJAX的概念和作用,以及使用async参数和open()方法的注意事项。同时强调了不推荐使用async=false的情况,并解释了JavaScript等待服务器响应的机制。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文分享了一个关于在C#中使用异步代码的问题,作者在控制台中运行时代码正常工作,但在Windows窗体中却无法正常工作。作者尝试搜索局域网上的主机,但在窗体中计数器没有减少。文章提供了相关的代码和解决思路。 ... [详细]
  • 本文是一位90后程序员分享的职业发展经验,从年薪3w到30w的薪资增长过程。文章回顾了自己的青春时光,包括与朋友一起玩DOTA的回忆,并附上了一段纪念DOTA青春的视频链接。作者还提到了一些与程序员相关的名词和团队,如Pis、蛛丝马迹、B神、LGD、EHOME等。通过分享自己的经验,作者希望能够给其他程序员提供一些职业发展的思路和启示。 ... [详细]
  • Metasploit攻击渗透实践
    本文介绍了Metasploit攻击渗透实践的内容和要求,包括主动攻击、针对浏览器和客户端的攻击,以及成功应用辅助模块的实践过程。其中涉及使用Hydra在不知道密码的情况下攻击metsploit2靶机获取密码,以及攻击浏览器中的tomcat服务的具体步骤。同时还讲解了爆破密码的方法和设置攻击目标主机的相关参数。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • PHPMailer邮件类邮件发送功能的使用教学及注意事项
    本文介绍了使用国外开源码PHPMailer邮件类实现邮件发送功能的简单教学,同时提供了一些注意事项。文章涵盖了字符集设置、发送HTML格式邮件、群发邮件以及避免类的重定义等方面的内容。此外,还提供了一些与PHP相关的资源和服务,如传奇手游游戏源码下载、vscode字体调整、数据恢复、Ubuntu实验环境搭建、北京爬虫市场、进阶PHP和SEO人员需注意的内容。 ... [详细]
  • 深入理解CSS中的margin属性及其应用场景
    本文主要介绍了CSS中的margin属性及其应用场景,包括垂直外边距合并、padding的使用时机、行内替换元素与费替换元素的区别、margin的基线、盒子的物理大小、显示大小、逻辑大小等知识点。通过深入理解这些概念,读者可以更好地掌握margin的用法和原理。同时,文中提供了一些相关的文档和规范供读者参考。 ... [详细]
author-avatar
没得名儿呀没名字
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有