-
Notifications
You must be signed in to change notification settings - Fork 0
trinity_getting_started
需要 js 准备的是一个被称作 jsentry 的功能函数,当然你也可以使用其他名字或者通过 javascript 类似 命名空间 方式进行。
该功能函数主要是用于接收来自
值得注意的是 jsentry 的 javascript 函数是具有严格的形式参数的。通常需要这样一个函数
function jsEntry(swfid,msg){
//...
} 其中 msg 具有一定的格式,如 API:Trinity External Event的传出格式。
当然你可以通过 js 类似 命名空间 的方式进行,如你的自定义的类库,比如也称之 Lib。
Lib.trinity.entry = function (swfid,msg){
//...
} 这部分内容和 API:Trinity External Parameters 有关。
你可以使用任何可以嵌入 Flash 的 JS 类库如 SWFObject 来进行管理Flash,只要在对应的 Flashvars 的参数中做配置好在 准备好 JS 提及的 jsentry 入口。同时指定好 swfid
下面以 SWFObject 为例子
页面结构:
<div id="myAlternativeContent">
<a href="http://www.adobe.com/go/getflashplayer">
<img src="http://www.adobe.com/images/shared/download_buttons/get_flash_player.gif" alt="Get Adobe Flash player" />
</a>
</div>随后代码:
function jsEntry(swfid,msg){
alert("calling from Trinity!");
}
var flashvars = {};
flashvars.jsentry = "jsEntry";
flashvars.swfid = "myAlternativeContent";
flashvars.group = "_group";
flashvars.debug = "true";
var params = {};
params.allowscriptaccess = "always";
var attributes = {};
swfobject.embedSWF("trinity.swf", "myAlternativeContent", "1", "1", "9.0.0", false, flashvars, params, attributes);当然也可能是基于你的第三方类库
Lib.trinity.jsEntry = function (swfid,msg){
alert("calling from Trinity!");
}
var flashvars = {};
flashvars.jsentry = "Lib.trinity.jsEntry";
flashvars.swfid = "myAlternativeContent";
flashvars.group = "_group";
flashvars.debug = "true";
var params = {};
params.allowscriptaccess = "always";
var attributes = {};
swfobject.embedSWF("trinity.swf", "myAlternativeContent", "1", "1", "9.0.0", false, flashvars, params, attributes);注意要点
- 必需激活 Flash播放器参数 的 allowscriptaccess 参数为
true用于打开 Flash 和 页面脚本通信。 - Trinity 参数大小写不敏感,但必需包含在 flashvars 中。
-
jsentry的路径是基于 javascriptwindow下进行索引的,因此名称需要保持一致。因此相对配置成为'Lib.trinity.jsEntry' 则相当于会进行window['Lib.trinity.jsEntry']匹配,所以需要您确保 javascript 在 Trinity 呼叫之前 jsEntry 已存在。 -
swfid必需指定,请确保最终嵌入 flash 的元素代码的 id 和此一致。 -
group建议以下划线_开头,以便用于任何情况下通信。 -
debug则建议是传入有意义的非 0 值,这样就能够查看到非字节流压缩的本地缓存。这里您可能需要使用到 minerva 用以查看 Flash 本地缓存内容。
本处内容需要了解API:Trinity External Event,由于基于 AJBridge 的 as3 core 因此会有个典型的 swfReady 事件产生。可以通过此事件进行检查 Flash 是否正确加载并并执行。
在 Trinity 中最常用到的是以下 5 个事件:
通常我们会对之前 javascript 中定义的 jsentry 做为路由,然后进行事件派发。如:
function jsEntry(swfid,msg){
switch(msg.type){
case 'master':
//...
break;
case 'join':
//...
break;
}
}这部分需要了解 Trinity 的 fire 接口 fire(); 。 更多扩展接口见 API:Trinity External Interface。
这部分很简单,如果你能获得 嵌入 flash 的 HTML 元素只要进行类似库的调用即可:
var Trinity = Trinity_html_element;
Trinity.fire('Hello! Guys!');当然也支持发送指定节点. 当然这里可能需要用点小技巧,比如通过 Trinity 开放的本地缓存存储并获得所有节点内容
nodes = Trinity.getItem('nodes') || [];
for(var i=0; i<nodes.length; i++)Trinity.fire('Hello! Guy!', nodes[i]);这部分需要了解 Trinity 的 getItem(); 和 setItem(); 。 更多扩展接口见 API:Trinity External Interface。
这部分很简单,如果你能获得 嵌入 flash 的 HTML 元素只要进行类似库的调用即可:
var Trinity = Trinity_html_element;
Trinity.setItem('data','json');
alert(Trinity.getItem('data','json')); // json警告
- 由于浏览器同时对 SharedObject (flash 本地存储)做写操作,可能会导致崩溃。建议仅由 master 来负责 setItem。
- getItem 读操作。没问题,不会冲突。
即由 1 个主节点和 n(n>=0) 个 节点 组成的网络称之为 Trinity 节点网络,简称“节点网络”.
每个 Trinity 实例对象被称之为节点。每个节点随时都可能成为主节点。因此需要通过侦听master事件以便采取行动。
而对于任何应用来说几乎可以忽略是否是主节点还是节点,因为他们之间是可以随时被切换的,同时他们又具备了完全相同的接口。只是在应用对应的活动层不同而已,如向网络发起请求以及获得数据的必然是 master 而 node 只要坐等数据被广播然后处理就好。
节点具有以下几个事件:
可以看出除 master 外都有相关事件。
而其扩展接口是完备的。
主节点又称之“master节点”,是整个Trinity 节点网络唯一的控制器,负责对活动层的控制和消息转发或广播,是关键的节点。
一般情况下第一个创建的Trinity实例就是 master 节点。
当且仅当该节点下线、关闭或者失效,则其他从属节点会发现从而在从属节点中会诞生新的主节点。
| 接口 | 主节点 | 节点 |
|---|---|---|
| fire(data[,to]) ; | √ | √ |
| getItem(key) ; | √ | √ |
| setItem(key,value) ; | √ | √ |
| connect() ; | √ | √ |
| 事件 | 主节点 | 节点 |
|---|---|---|
| swfReady | √ | √ |
| master | √ | x |
| join | √ | √ |
| message | √ | √ |
| status | √ | √ |
| error | √ | √ |