CMP4 API使用说明
基本介绍：:

1，api就是应用程序接口，cmp的api用来提供给外部插件或页面javascript脚本调用，以便达到对cmp进行控制的目的

2，通过api，可以读取或设置cmp的相关属性，可以调用方法对其进行控制，可以绑定事件进行侦听等等

3，支持api的地方：

（1），插件plugins和背景backgrounds

（2），皮肤中的5个窗口背景src

（3），自定义混音器mixer_src

（4），单个音乐的视频区背景bg_video和歌词区背景bg_lrc

（5），页面javascript脚本（基本支持）

4，flash的脚本必须为actionscript 3版本，javascript调用时必须允许脚本通讯（allowScriptAccess="always"）

调试例子见：CMP4 API调试页
Actionscript 3 api:

基本例子：
var api:Object; //cmp的api是通过对共享事件sharedEvents的侦听，由共享事件的data传递的 root.loaderInfo.sharedEvents.addEventListener('api', apiHandler); function apiHandler(e):void { //取得cmp的api对象和侦听key，包含2个属性{api,key} var apikey:Object = e.data; if (! apikey) { return; } api = apikey.api; //侦听皮肤加载完成事件 api.addEventListener(apikey.key, 'skin_loaded', skinHandler); } function skinHandler(e):void { trace("from api:" + api.config.skin_id); }
属性attributes：
cmp:Object; | 返回cmp对象
config:Object; | 取得cmp全局配置
item:Object; | 取得当前播放项
list_xml:XML; | 取得列表xml的引用
skin_xml:XMLList; | 取得当前皮肤配置的引用
tools:Object; | 返回cmp的工具箱，主要有：base64, effects, graphics, netclient, output, states, strings, types, zoom, zip
win_list:Object; | 取得5个窗口的引用，有如下5个属性: option/list/media/console/lrc 当然还可以访问下一级对象，如要访问播放按钮bt_play则可： var bt_play = api.win_list.console.bt_play; 结构和名称同皮肤包里面的skin.xml皮肤配置的结构和名称
方法methods：
addEventListener():void; | 添加一个事件侦听器，如侦听皮肤加载完成事件： api.addEventListener(api.key, 'skin_loaded', skinHandler); 特别不同，这里第一个参数需传入api.key，它是一个唯一key值，用于第三方flash移除时，销毁其key所在所有注册的事件
removeEventListener():void; | 移除一个事件侦听器，如：api.removeEventListener('skin_loaded', skinHandler);
sendEvent():void; | 发送一个事件，如：api.sendEvent("view_play"); 如果有参数data要传递就是：api.sendEvent("view_play", data);
toString():String; | 打印api所有属性，方法，事件类型，方便查阅所有支持的api
事件类型events：按字母顺序
api事件：
api | 发送api共享事件时调度
api_remove | api插件移除时调用
配置事件：
config_loaded | 配置文件加载完成时调度
控制端事件：
control_fullscreen | 全屏状态改变时调度
control_load | 音乐开始加载时调度
control_max | 最大化改变时调度，事件的data将传递是lrc_max还是video_max
control_mute | 静音状态改变时调度
control_next | 播放下一个时调度
control_pause | 暂停时调度
control_play | 播放时调度
control_playmode | 播放模式改变时调度
control_prev | 播放上一个时调度
control_progress | 进度改变时调度
control_stop | 停止时调度
control_volume | 音量改变时调度
control_win | 窗口打开关闭时调度
control_winbt | 窗口对应按钮状态改变时调度
列表项事件：
item_deleted | 列表项删除时调度，事件的data将返回删除项对象
list列表事件：
list_change | 列表已经改变时调度，表示新的列表已经刷新，可用于播放等操作
list_load | 使列表开始加载时调度，事件的data可以传递true或false，表示是否重建列表根节点 如果重建加载完成后将覆盖列表，不重建就是附加到原有列表后，默认是不重建
list_loaded | 列表内容加载完时调度，多个列表会调度多个，用API更改列表内容也调度 每个完成都将自动刷新列表显示
lrc歌词事件：
lrc_max | 对歌词最大化状态进行切换
lrc_resize | 歌词尺寸改变时调度，包括对歌词进行缩放调整
声音频谱事件：
mixer_color | 对混音器颜色进行随便变更时调度
mixer_displace | 对混音器的置换效果状态进行切换时调度
mixer_filter | 对混音器的滤镜效果状态进行切换时调度
mixer_next | 使用下一个混音器效果时调度
mixer_prev | 使用上一个混音器效果时调度
播放模块事件：
model_error | 当前项发生错误时调度
model_loaded | 当前项下载完成时调度
model_loading | 当前项正在下载时调度
model_meta | 当前项取得meta信息时调度
model_start | 当前项播放开始时调度
model_state | 当前项状态改变时调度
model_time | 当前项播放时间改变时调度
plugin插件事件：
plugins_load | 插件和背景开始加载时调度
plugins_remove | 插件和背景移除时调度
初始化和改变大小事件：
ready | CMP准备好进行初始化时调度
resize | 播放器改变尺寸时调度
skin皮肤事件：
skin_change | 针对皮肤id对皮肤进行改变时调度
skin_complete | 皮肤显示完成时调度
skin_load | 皮肤开始加载时调度
skin_loaded | 皮肤加载完成时调度
video视频事件：
video_effect | 对视频效果进行改变时调度
video_max | 对视频最大化进行切换时调度
video_resize | 视频尺寸改变时调度
video_smoothing | 修改平滑设置时调度
view视图事件：
view_console | 对控制窗口状态进行改变时调度
view_fullscreen | 对全屏状态进行改变时调度
view_item | 对播放项进行改变时调度
view_list | 对列表窗口进行改变时调度
view_lrc | 对歌词窗口进行改变时调度
view_mute | 点击静音按钮时调度
view_next | 点击下一个按钮时调度
view_option | 对设置窗口进行改变时调度
view_play | 点击播放或暂停按钮时调度，事件的data可以传递列表id位置，表示播放第几个
view_prev | 点击上一个按钮时调度
view_progress | 拖动播放进度条时调度
view_random | 点击随机按钮时调度
view_repeat | 点击重播按钮时调度
view_stop | 点击停止按钮时调度
view_video | 对视频窗口状态进行改变时调度
view_volume | 拖动音量条时调度

Javascript api:

JS调用前提和基本例子：
//定义cmpo，即页面中cmp所在flash object的引用 var cmpo; //一般可以直接可以通过document.getElementById("cmp")的方法获取，问题是如果页面的cmp还未载人完成将无法得到，所以推荐使用下面的方法 //先给cmp设置页面脚本回调函数名，通过api参数传递，cmp加载完成时将自动调用此函数 CMP.write("cmp", "800", "450", "cmp.swf", "api=cmp_loaded"); function cmp_loaded(key) { cmpo = CMP.get("cmp"); if (! cmpo) { return; } //侦听列表项删除事件 cmpo.addEventListener("item_deleted", "del"); } function del(obj) { } //其中CMP为页面flash载人类，见cmp.js //获取cmpo对象后，我们就可以调用下面所有支持的方法了
Javascript调用方法：
方法名 | 说明 | 例子
--- | --- | ---
cmp_api(); | 只读，返回CMP所有支持的API信息 同flash里面api的toString();方法，这里包括flash支持的所以API，js只需查看事件类型部分 | var str = cmpo.cmp_api();
config(); | 1，读取CMP当前所有的全局配置，返回一个Object对象(包含所有配置属性设置) | var config = cmpo.config();
2，读取配置的某个属性值 当然可以先用上面1中的方法读取整个配置对象，再取得其中某个属性的值 | var skin_id = cmpo.config("skin_id"); var skin_id = cmpo.config().skin_id;
3，修改某个属性的值，需传入属性名称和值 注意：修改属性仅是将值写入配置中，需要下次有相关的刷新（如发送事件）才应用新的值 | cmpo.config("skin_id", "1");
item(); | 1，返回当前播放项的一个Object对象，如果没有开始任何播放，将返回null | var item = cmpo.item();
2，返回当前播放项的某个属性值，方法同上config() | var src = cmpo.item("src"); var src = cmpo.item().src;
3，修改某个属性的值，方法同上config() | cmpo.item("src", "test.mp3");
list_xml(); | 1，读取CMP当前列表内容，返回一个xml的字符串 | var xml = cmpo.list_xml();
2，修改列表内容，需传入一个xml列表格式的字符串 | var xml = '<list><m label="test" src="test.mp3" /></list>'; cmpo.list_xml(xml);
默认将往列表附加传入的列表信息，如果需要覆盖原有的音乐可以设置第2个参数 表示是否附加到原有列表后面，默认为true表示附加，传入false表示不附加，将写入新的列表内容 | cmpo.list_xml(xml, false);
list(); | 1，返回CMP列表数的所有信息，包括未打开的列表 将返回一个数组，数组每项都是一个音乐项对象，类型为Object | var arr = cmpo.list();
读取一级列表的个数 | var num = cmpo.list().length;
返回第二个项，数组是从0开始的，第二个项索引就是1 | var m2 = cmpo.list()[1];
如果这个音乐项是个目录，则会有children属性，表示它下面的子列表，也是一个数组 以此类推，这样我们可以逐个循环得到整个列表 当然音乐项也有parent属性，表示其父目录对象 | var m2_arr = m2.children;
2，返回某个指定的项对象 参数可以是包含唯一key值Object型的项对象，也可以直接传入字符型key值 key值可以从上面1中的列表项对象中读取 | var item = cmpo.list(m2); var item = cmpo.list("ITEM_1");
3，读取项的某个属性 | var src = cmpo.list("ITEM_1", "src");
如果传入的参数是项支持的一个方法名，则执行此项的某个方法 目前支持：play播放此项, open打开此目录, close关闭此目录, toggle开关切换, remove移除此项 | cmpo.list("ITEM_1", "play");
skin_xml(); | 只读，返回当前皮肤配置文件内容的xml字符形式 | var xml = cmpo.skin_xml();
skin(); | 1，读取皮肤元件的某个属性值，第1个参数表示皮肤元件位置，第2个是元件属性名 | var width = cmpo.skin("console", "width"); var xywh = cmpo.skin("console.bt_play", "xywh");
2，修改元件的某个属性，如果修改成功将返回true | cmpo.skin("console.bt_play", "xywh", "0, 0, 100, 20");
sendEvent(); | 往CMP发送事件 第1个参数是事件类型，所有支持类型见上面cmp支持的所有事件类型列表 第2个参数是需要传入的数据（可选） | cmpo.sendEvent("view_play"); cmpo.sendEvent("view_play", 2);
addEventListener(); | 添加一个js侦听方法 第1个参数是事件类型，同上 第2个参数是回调函数名，字符串格式 | cmpo.addEventListener("item_deleted", "del"); function del(data) { }
removeEventListener(); | 移除一个已经注册的js侦听方法 | cmpo.removeEventListener("item_deleted", "del");