浏览 24910 次
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-29
最后修改:2010-04-01
目录 (一)有关框架 (二)文件组织与代码组织 (三)JS与FLASH交互 (四)ajax局部刷新与RPC (五)获取设置元素样式与监听元素事件 (六)页面元素的创建调整与关联 (七)浏览器兼容性问题 (八)WEB软件的前端架构实践 文章中的代码只为表达文章意义,非真正能执行的代码。 JS与FLASH交互 与flash交互遇到的问题 一、由于嵌入标记以及浏览器等原因,导致JS无法调用FLASH中的方法 使用swfobject来嵌入你的FLASH 它的优点有:
二、FLASH调用JS的时候,JS对象还不存在 由于大部分脚本是放到页面最底部的(这样做的原因是让浏览器先渲染出界面,因为载入脚本时会停止渲染页面),所以如果在脚本导入之前就嵌入了FLASH,并且FLASH尝试调用JS方法,此时可能JS对象所在的脚本还未执行。我的做法是把嵌入的FLASH的代码放到所有脚本执行之后。 三、JS调用FLASH的时候,FLASH还未初始化完成 FLASH嵌入到页面中后,根据文件大小 ,下载要一定时间,下载完成后,FLASH还要执行初始化操作,其中就包括初始化暴露给JS调用的方法,在这一切没有做好之前,如果JS尝试与FLASH交互,必然会失败。在做好解决上面的第二个问题之后,解决这个问题的办法就是让FLASH通知JS,说自己已经处于READY状态了。 $flashReadyListeners = {}; //把FLASH初始化完后要执行的JS写在传递给flashReady的参数fn里面。 function flashReady(flashName, fn){ var listeners = $flashReadyListeners[flashName] if(!listeners)listeners=$flashReadyListeners[flashName]=[]; listeners.push(fn); } //flash初始化完成后调用此方法 function flashInit(flashName){ var listeners = $flashReadyListeners[flashName]; if(listeners){ jQuery.each(listeners, function(fn){ typeof fn == "function" && fn(); }) } } //example //在chat.swf载入完成后,调用它jsCall方法 flashReady("chat", function(){ getFlash("chat").jsCall("speak","hello"); }) 四、flash与js相互调用的接口 flash与js要相互调用,要约定好接口方法名,参数个数及意义,一有变化,要改相应代码,FLASH还要重新编译,很是麻烦。目前的做法是: 先根据需求,讨论好后把接口规范放到WIKI上面。然后通过以下方法路由选择后再调用具体方法。 FLASH代码中的定义 //我不会写FLASH,以下代码不能运行 //js调用FLASH function jsCall(fnName, args, callback){} //flash调用JS function callJs(fnName, args, callback){} JS代码中的定义 //flash调用JS function flashCall(fnName, args, callback){ switch(name){ case name == "updateStatus": app.$currentUser.updateStatus(args, callback); break; default: thrown fnName + "未定义"; } } //JS调用FLASH function callFlash(flashName, fnName, args, callback){ getFlash(flashName).jsCall(fnName, args, callback); } 参数说明: @param fnName {String} 要调用的方法名 @param args {Object} 传递给具体方法的参数HASH,key为字符串 //这样做,你可以给参数定名称,与WIKI对应。然后要增加参数与方便 @param callback {Function} 方法调用后要执行的 回调 目前JS与FLASH的调用,还不算太多,十个左右吧,所以路由实际上用的是IF ELSE 。 当然这样做不是很好,具体怎样做,欢迎大家讨论。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-03-30
swfobject用的比较多....
|
|
返回顶楼 | |
发表时间:2010-03-31
昨儿弄完一个js与as2交互的东东。
貌似是getURL("javascript:js函数"); 还有一个是在该帧引入一个flash类,有两个函数call与addcall,具体忘了~ |
|
返回顶楼 | |
发表时间:2010-04-02
ghyghoo8 写道 昨儿弄完一个js与as2交互的东东。
貌似是getURL("javascript:js函数"); 还有一个是在该帧引入一个flash类,有两个函数call与addcall,具体忘了~ 用getURL会有浏览器不兼容的情况,例如mac下的safari. |
|
返回顶楼 | |
发表时间:2010-04-03
不了解 FLASH 怎么做,只知道很多纯浏览器干不来的活这个可以干,相当于activex了吧
|
|
返回顶楼 | |