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")
| 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属性,表示它下面的子列表,也是一个数组 以此类推,这样我们可以逐个循环得到整个列表 |
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侦听方法 第2个参数是回调函数名,字符串格式 |
cmpo.addEventListener("item_deleted", "del"); function del(data) { } |
| removeEventListener(); | 移除一个已经注册的js侦听方法 | cmpo.removeEventListener("item_deleted", "del"); |