`

为CKEditor开发FLV视频播放插件

阅读更多

 FLV视频格式具有本身占有率低、视频质量良好、体积小等特点,非常适合在网络上传播。国内的视频站几乎都是采用FLV格式作为解决方案。但是,在新版本的CKEditor里却没有FLV格式视频的支持。不过CKEditor却提供了丰富的接口,于是我们自己动手开发CKEditor的FLV视频播放插件。
首先,配置好CKEditor和CKFinder,具体配置方法请参考我的上一篇文章:
http://blog.csdn.net/ishowing/archive/2009/09/24/4589950.aspx
在CKEditor目录下有专门放插件的目录plugins,我们也把插件放这个目录下,新建一个文件夹flvPlayer,然后在这个目录下新建一个文件plugin.js,输入下面内容:

view plaincopy to clipboardprint?
CKEDITOR.plugins.add('flvPlayer',  
{  
    init: function(editor)      
    {          
        //plugin code goes here  
        var pluginName = 'flvPlayer';   
        editor.ui.addButton('flvPlayer',  
        {                 
            label: '插入Flv视频',  
            command: pluginName  
        });  
    }  
}); 
CKEDITOR.plugins.add('flvPlayer',
{
    init: function(editor)   
    {       
        //plugin code goes here
        var pluginName = 'flvPlayer';
        editor.ui.addButton('flvPlayer',
        {              
            label: '插入Flv视频',
            command: pluginName
        });
    }
});

目录如下:

 

 

代码很容易理解,添加名为flvPlayer的插件,并初始化。这里有两个参数需要注意:
label:当鼠标悬停在按钮上出现的文字提示,相当于HTML里的title
command:点击按钮的时候默认执行的事件
然后,我们在ckeditor\config.js里注册这个插件,就能看到了。打开ckeditor\config.js,添加下面代码:

view plaincopy to clipboardprint?
CKEDITOR.editorConfig = function( config )  
{  
    // Define changes to default configuration here. For example:  
    // config.language = 'fr';  
    // config.uiColor = '#AADC6E';  
    config.toolbar = 'MyToolbar';  
 
    config.toolbar_MyToolbar =  
    [  
        ['Source','-','Save','NewPage','Preview','-','Templates'],  
        ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],  
        ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],  
        ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],  
        '/',  
        ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],  
        ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],  
        ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],  
        ['Link','Unlink','Anchor'],  
        ['Image','Flash','flvPlayer','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],  
        '/',  
        ['Styles','Format','Font','FontSize'],  
        ['TextColor','BGColor'],  
        ['Maximize', 'ShowBlocks','-','About']  
          
    ];  
    config.extraPlugins = 'flvPlayer';  
 
}; 
CKEDITOR.editorConfig = function( config )
{
 // Define changes to default configuration here. For example:
 // config.language = 'fr';
 // config.uiColor = '#AADC6E';
 config.toolbar = 'MyToolbar';

    config.toolbar_MyToolbar =
    [
        ['Source','-','Save','NewPage','Preview','-','Templates'],
        ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
        ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
        ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
        '/',
        ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
        ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
        ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
        ['Link','Unlink','Anchor'],
        ['Image','Flash','flvPlayer','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],
        '/',
        ['Styles','Format','Font','FontSize'],
        ['TextColor','BGColor'],
        ['Maximize', 'ShowBlocks','-','About']
       
    ];
    config.extraPlugins = 'flvPlayer';

};

运行以后我们就可以看到,多出来一个位置:



 
按钮上没有图片的话会让人郁闷的,于是我们给按钮添加一个图标。我们找到一个16×16的图标,放到kama/images目录下。如果你使用kama风格的话,打开skins\kama\editor.css,加入以下代码:
view plaincopy to clipboardprint?
.cke_skin_kama .cke_button_flvPlayer .cke_icon{background:url(images/insertflv.gif);} 
.cke_skin_kama .cke_button_flvPlayer .cke_icon{background:url(images/insertflv.gif);}

再次运行页面,我们就能看到按钮的图标了:

 

 

但是现在我们还没为点击按钮添加相应的事件。再打开plugin.js,添加下面代码:

view plaincopy to clipboardprint?
CKEDITOR.dialog.add(pluginName, this.path + 'dialogs/flvPlayer.js');          
editor.addCommand(pluginName, new CKEDITOR.dialogCommand(pluginName));  
为插件添加对话框。我们把相应的代码放在plugins\flvPlayer\dialogs\flvPlayer.js里。编辑flvPlayer.js:  
CKEDITOR.dialog.add('flvPlayer', function(editor){  
      
    var escape = function(value){  
        return value;  
    };  
    return {  
        title: '插入Flv视频',  
        resizable: CKEDITOR.DIALOG_RESIZE_BOTH,  
        minWidth: 350,  
                minHeight: 300,  
        contents: [{  
          id: 'info',    
                    label: '常规',  
                    accessKey: 'P',  
                    elements:[  
                        {  
                        type: 'hbox',  
                        widths : [ '80%', '20%' ],  
                        children:[{  
                                id: 'src',  
                                type: 'text',  
                                label: '源文件' 
                            },{  
                                type: 'button',  
                                id: 'browse',  
                                filebrowser: 'info:src',  
                                hidden: true,  
                                align: 'center',  
                                label: '浏览服务器' 
                            }]  
                        },  
                        {  
                        type: 'hbox',  
                        widths : [ '35%', '35%', '30%' ],  
                        children:[{  
                            type: 'text',  
              label: '视频宽度',  
              id: 'mywidth',  
              'default': '470px',  
              style: 'width:50px' 
                        },{  
                            type: 'text',  
              label: '视频高度',  
              id: 'myheight',  
              'default': '320px',  
              style: 'width:50px' 
                        },{  
                            type: 'select',  
              label: '自动播放',  
              id: 'myloop',  
              required: true,  
              'default': 'false',  
              items: [['是', 'true'], ['否', 'false']]  
                        }]//children finish  
                        },{  
                  type: 'textarea',  
              style: 'width:300px;height:220px',  
              label: '预览',  
              id: 'code' 
              }]  
                    }, {  
                        id: 'Upload',  
                        hidden: true,  
                        filebrowser: 'uploadButton',  
                        label: '上传',  
                        elements: [{  
                            type: 'file',  
                            id: 'upload',  
                            label: '上传',  
                            size: 38  
                        },  
                        {  
                            type: 'fileButton',  
                            id: 'uploadButton',  
                            label: '发送到服务器',  
                            filebrowser: 'info:src',  
                            'for': ['Upload', 'upload']//'page_id', 'element_id'   
                        }]  
        }],  
        onOk: function(){  
            mywidth = this.getValueOf('info', 'mywidth');  
            myheight = this.getValueOf('info', 'myheight');  
            myloop = this.getValueOf('info', 'myloop');  
            mysrc = this.getValueOf('info', 'src');  
            html = '' + escape(mysrc) + '';  
            //editor.insertHtml("<pre class=\"brush:" + lang + ";\">" + html + "</pre>");  
            editor.insertHtml("<embed height=" + myheight + " width=" + mywidth + " autostart=" + myloop + " flashvars=\"file=" + html + "\" allowfullscreen=\"true\" allowscriptaccess=\"always\" bgcolor=\"#ffffff\" src="\" mce_src="\""ckeditor/plugins/flvPlayer/jwplayer.swf\"></embed>");  
        },  
        onLoad: function(){  
        }  
    };  
}); 
CKEDITOR.dialog.add(pluginName, this.path + 'dialogs/flvPlayer.js');       
editor.addCommand(pluginName, new CKEDITOR.dialogCommand(pluginName));
为插件添加对话框。我们把相应的代码放在plugins\flvPlayer\dialogs\flvPlayer.js里。编辑flvPlayer.js:
CKEDITOR.dialog.add('flvPlayer', function(editor){
    
    var escape = function(value){
        return value;
    };
    return {
        title: '插入Flv视频',
        resizable: CKEDITOR.DIALOG_RESIZE_BOTH,
        minWidth: 350,
                minHeight: 300,
        contents: [{
          id: 'info', 
                    label: '常规',
                    accessKey: 'P',
                    elements:[
                        {
                        type: 'hbox',
               widths : [ '80%', '20%' ],
                        children:[{
                                id: 'src',
                                type: 'text',
                                label: '源文件'
                            },{
                                type: 'button',
                                id: 'browse',
                                filebrowser: 'info:src',
                                hidden: true,
                                align: 'center',
                                label: '浏览服务器'
                            }]
                        },
                        {
                        type: 'hbox',
               widths : [ '35%', '35%', '30%' ],
                        children:[{
                            type: 'text',
              label: '视频宽度',
              id: 'mywidth',
              'default': '470px',
              style: 'width:50px'
                        },{
                            type: 'text',
              label: '视频高度',
              id: 'myheight',
              'default': '320px',
              style: 'width:50px'
                        },{
                            type: 'select',
              label: '自动播放',
              id: 'myloop',
              required: true,
              'default': 'false',
              items: [['是', 'true'], ['否', 'false']]
                        }]//children finish
                        },{
                  type: 'textarea',
              style: 'width:300px;height:220px',
              label: '预览',
              id: 'code'
              }]
                    }, {
                        id: 'Upload',
                        hidden: true,
                        filebrowser: 'uploadButton',
                        label: '上传',
                        elements: [{
                            type: 'file',
                            id: 'upload',
                            label: '上传',
                            size: 38
                        },
                        {
                            type: 'fileButton',
                            id: 'uploadButton',
                            label: '发送到服务器',
                            filebrowser: 'info:src',
                            'for': ['Upload', 'upload']//'page_id', 'element_id'
                        }]
        }],
        onOk: function(){
            mywidth = this.getValueOf('info', 'mywidth');
            myheight = this.getValueOf('info', 'myheight');
            myloop = this.getValueOf('info', 'myloop');
            mysrc = this.getValueOf('info', 'src');
            html = '' + escape(mysrc) + '';
            //editor.insertHtml("<pre class=\"brush:" + lang + ";\">" + html + "</pre>");
            editor.insertHtml("<embed height=" + myheight + " width=" + mywidth + " autostart=" + myloop + " flashvars=\"file=" + html + "\" allowfullscreen=\"true\" allowscriptaccess=\"always\" bgcolor=\"#ffffff\" src="\" mce_src="\""ckeditor/plugins/flvPlayer/jwplayer.swf\"></embed>");
        },
        onLoad: function(){
        }
    };
});

参数如下:
title : /*标题上显示的文字*/,
minWidth : /*宽度*/,
minHeight : /*高度*/,
buttons: /*添加更多的按钮*/,
onOk: /*完成后执行的函数*/ ,
contents: /*对话框里的UI元素*/

view plaincopy to clipboardprint?
contents: [{  
        id: 'page1',  /* not CSS ID attribute! */ 
        label: 'Page1',  
        accessKey: 'P',  
        elements:[ /*elements */]  
    }, {  
        id:'page2',  
        label:'Page2',  
         accessKey: 'Q',  
        elements:[/*elements*/]  
    }] 
contents: [{
        id: 'page1',  /* not CSS ID attribute! */
        label: 'Page1',
        accessKey: 'P',
        elements:[ /*elements */]
    }, {
        id:'page2',
        label:'Page2',
         accessKey: 'Q',
        elements:[/*elements*/]
    }]

添加以后对话框看起来是这样:

 

 

更复杂的元素布局比如这样:

view plaincopy to clipboardprint?
elements:[{  
                    type : 'hbox',  
                    widths : [ '100px', '100px', '100px' ],  
                    children :  
                    [{  
                        type:'html',  
                        html:'<div>Cell1</div>',  
                    },{  
                        type:'html',  
                        html:'<div>Cell2</div>',  
                    },{  
                        type: 'vbox',  
                        children:[{  
                            type:'html',  
                            html:'<div>Cell3</div>',  
                        },{  
                            type:'html',  
                            html:'<div>Cell4</div>' 
                        }]  
                    }] 
elements:[{
                    type : 'hbox',
                    widths : [ '100px', '100px', '100px' ],
                    children :
                    [{
                        type:'html',
                        html:'<div>Cell1</div>',
                    },{
                        type:'html',
                        html:'<div>Cell2</div>',
                    },{
                        type: 'vbox',
                        children:[{
                            type:'html',
                            html:'<div>Cell3</div>',
                        },{
                            type:'html',
                            html:'<div>Cell4</div>'
                        }]
                    }]

得到的对话框是这样:

 

 

 

下面的onOk函数无非就是收集前面填写的东西,然后将这段代码插入CKEditor,很好理解。
完成后的效果:

 

 

写原创教程不容易,转载请注明转自:http://www.tangyong.net谢谢!

 

 

再PS一个:文章参考了香港一哥们写的教程:《CKEditor Plugin Development》,链接:http://www.voofie.com/content/2/ckeditor-plugin-development/

一并致谢!

  • 大小: 46.1 KB
  • 大小: 27.8 KB
  • 大小: 27.9 KB
  • 大小: 6.7 KB
  • 大小: 9 KB
  • 大小: 44.8 KB
分享到:
评论

相关推荐

    CKEditor FLV视频播放插件

    FLV视频格式具有本身占有率低、视频质量良好、体积小等特点,非常适合在网络上传播。国内的视频站几乎都是采用FLV格式作为解决方案...于是我自己动手开发CKEditor的FLV视频播放插件现在上传。PS:这个版本是.net版的。

    ckeditor支持flv文件播放

    然而,描述中提到的问题是,CKEditor原生不支持FLV视频文件的播放。 FLV(Flash Video)是一种流行的网络流媒体格式,尤其在早些年,很多网站用它来发布视频内容。由于FLV文件体积小,加载速度快,因此在没有HTML5...

    CKEditor 4.1.1 MediaPlayer视频播放插件

    ckeditor4.1.1中只有Flash视频播放插件,而没有集成一个专门的视频播放插件,通过安装本插件可以将MediaPlayer视频播放器(clsid:6bf52a52-394a-11d3-b153-00c04f79faa6)集成到ckeditor4.1.1当中, 本插件只支持...

    CKEditor 4.1 MediaPlayer视频播放插件

    ckeditor4.1中只有Flash视频播放插件,而没有集成一个专门的视频播放插件, 通过安装本插件可以将MediaPlayer视频播放器(clsid:6bf52a52-394a-11d3-b153-00c04f79faa6)集成到ckeditor4.1当中。有兴趣者可以通过...

    ckeditor4音频视频上传自定义插件

    本文将深入探讨如何为CKEditor 4自定义音频和视频上传插件,以满足特定的媒体处理需求。 CKEditor 4音频视频上传插件的开发主要涉及以下几个核心知识点: 1. **CKEditor 4 API**:首先,我们需要熟悉CKEditor 4的...

    ckeditor4添加上传视频插件

    2. **配置插件**:在CKEditor 4的配置文件(config.js)中,设置`filebrowserVideoUploadUrl`为后端的视频上传API地址。 3. **自定义UI**:可以通过CKEditor 4的API创建一个按钮或菜单项,触发视频选择和上传操作。...

    ckeditor配置上传视频

    最近项目开发需要用到CKEditor在线编辑器,但发现他本身没有自带,所以需要自己手动配置插件。但网上很多配置都有问题,自己摸索了好久终于搞定。需要注意的细节有:flvPlayer文件夹的内容直接放在ckeditor文件夹...

    为CKEditor开发插入代码的插件

    本篇我们主要探讨如何为CKEditor开发一个插入代码的插件,这对于编写技术文档、分享代码片段或者在论坛上交流编程问题都非常实用。 首先,我们需要了解CKEditor的插件开发机制。CKEditor允许开发者通过插件系统扩展...

    ckeditor支持flv播放,两种途径

    包含两个包 jwplayer包为自己制作的视频插件,可以上传视频并可以播放,支持视频截图。但是编辑时出现问题...flash包为在ckeditor自带的flash插件的基础之上修改,可以上传,播放,编辑也没有问题。还不支持视频截图

    grails ckeditor 0.4修改支持flv插入

    开发者对CKEditor进行了自定义,以支持FLV视频的插入和播放,这可能是通过编写自定义插件或扩展CKEditor的现有功能来实现的。博客文章可能提供了详细的实现过程和配置指南,而压缩包中的源代码和配置文件则记录了这...

    fckeditor视频插件flvPlayer

    项目中遇到播放视频的要求,由于我采用的是fckeditor编辑器,于是想到用flvplayer视频插件,虽然还有其他插件但现在网上流行用flv格式作为视频的标准,网上找到很多这个插件,但基本都是出现一个视频错位的问题,原...

    CKEditor4.4.3(asp)支持flv播放插件

    CKEditor为4.4.3asp版本,通过修改ckeditor自带的flash插件,使ckeditor4.4.3支持flv文件播放,下载资源后直接覆盖ckeditor/plugins/flash即可,注意ckeditor版本是否一致。

    Ckeditor自定义插件

    在本场景中,我们探讨的是如何为CKEditor自定义插件,以便实现特定功能:当用户选择一段文字后,点击自定义按钮,这段文字后面会添加一个图标,该图标作为超链接指向特定地址,并且选中的文字作为超链接的参数。...

    ckeditor html5_video 插件添加封面和中文功能

    HTML5-Video 插件是 CKEditor 的一个扩展,它允许用户在编辑器中插入和编辑 HTML5 视频,从而提升用户体验。本教程将详细介绍如何增强 HTML5-Video 插件,使其支持中文显示并添加封面功能。 首先,我们要理解 ...

    CKEditor_plugins_FlvPlayer

    然而,随着HTML5的普及和Flash的退役,FLVPlayer的使用逐渐减少,现在的网页更多地采用HTML5的video标签来播放视频。 CKEditor_plugins_FlvPlayer插件可能包含以下组件和文件: 1. plugin.js:这是CKEditor插件的...

    ckeditor4 行高插件

    这就需要对CKEditor的插件开发机制有深入的了解,包括插件的生命周期、命令处理、数据模型和视图的同步等。 总结来说,CKEditor4的行高插件是一个增强编辑体验的重要工具,它通过提供灵活的行高设置,提升了文本的...

    CKEditor 添加Video插件(MP4,MP3)并且兼容HTML5 Video插件

    CKEditor 添加Video插件(MP4)并且兼容HTML5 Video插件 1:把video文件复制到ckeditor/plugins/下面 2:ckeditor/config.js 中添加如下: a:在toolbar中['Image','Flash','Video'],配置加入“Video” 项。 b:配置 ...

    CKEditor 4.0 行距插件lineheight

    "lineheight"插件是专门为CKEditor 4.0设计的一个重要组件,它解决了在编辑文本时对行距进行调整的需求。 在网页设计中,行距(Line Height)是一个关键的排版元素,它直接影响到文本的可读性和整体视觉效果。默认...

    CKEditor编辑器行高插件

    "行高插件"是CKEditor的一个扩展功能,旨在为用户提供调整文本行高的能力,这对于创建易读且美观的文档尤其重要。 行高,也称为行间距,是指文本中一行文字到下一行文字之间的距离。在设计和排版中,适当的行高可以...

Global site tag (gtag.js) - Google Analytics