应用思考-教育技术论坛

标题: flash与其它应用程序之间信息传递 [打印本页]

作者: etthink    时间: 2009-4-8 08:41
标题: flash与其它应用程序之间信息传递
1.flash要调用javascript中的函数
flash.external.ExternalInterface.call(“javascript中的函数名”);
2.javascript 要调用flash中的函数
flash.external.ExternalInterface.addCallback(”revic”,revic);
function revic(chenmiao):void{
  wang.text=chenmiao;
  }

2  网页可以通过swf地址给flash传递变量,以值对的形式传递,如下:
         <object classid=”clsid27CDB6E-AE6D-11cf-96B8-444553540000″
                     id=”LoaderInfoSample” width=”100%” height=”100%”
                     codebase=”http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab“>
                     <param name=”movie” value=”LoaderInfoSample.swf?a=1&b=2″ />
                     <param name=”quality” value=”high” />
                     <param name=”bgcolor” value=”#869ca7″ />
                     <param name=”allowScriptAccess” value=”sameDomain” />
                     <embed src=”LoaderInfoSample.swf?a=1&b=2″ quality=”high” bgcolor=”#869ca7″
                            width=”100%” height=”100%” name=”LoaderInfoSample” align=”middle”
                            play=”true”
                            loop=”false”
                            quality=”high”
                            allowScriptAccess=”sameDomain”
                            type=”application/x-shockwave-flash”
                            pluginspage=”http://www.adobe.com/go/getflashplayer“>
                     </embed>
       </object>

ActionSrippt2时,在第一帧就可以直接引用传递进来的这两个变量值了。
AS3抛弃了这种不规范的用法,同意使用LoaderInfo的Parameter属性来完成。
LoaderInfo的帮助文档请参考:http://livedocs.macromedia.com/l … lay/LoaderInfo.html
LoaderInfo 这个类是专门设计来保存swf,图片,或者其他任意DisplayObject的加载信息的。
swf参数也属于加载信息里的一部分,可以通过LoaderInfo的parameters属性取得,取出的结果是一个数组,可以通过for…in遍历他的值。
示例代码如下:
package org.flashbbs.sample
{
       import flash.display.MovieClip;
       import flash.display.LoaderInfo;
       import flash.text.TextField;
      
       public class LoaderInfoSample extends MovieClip
       {
              public function LoaderInfoSample(){
                     var key:String;
                     var value:String;
                     var text1:TextField = new TextField();
                     addChild(text1);
                     var param:Object = this.root.loaderInfo.parameters;
                     for (key in param) {
                            value = String(param[key]);
                            text1.appendText(key + “=” +value);
                     }
              }
       }
}
还有一点要注意的是,LoaderInfo属于As3的类,如果flash包含as1或者as2的代码,则它无法取出值,只能取出null

3 1.在<Object>和<embed>中设置flashVars参数,例如:
<object id=’mySwf’classid=’clsid:D27CDB6E-AE6D-11cf-96B8-444553540000′codebase=’http://fpdownload.macromedia.com ... current/swflash.cab’height=’100%’ width=’100%’>
        <param name=’src’ value=’FlashVarTest.swf’/>
        <param name=’flashVars’ value=’firstName=Nick&lastName=Danger’/>
        <embed name=’mySwf’ src=’FlashVarTest.swf’pluginspage=’http://www.adobe.com/go/getflashplayer’ height=’100%’width=’100%’ flashVars=’firstName=Nick&lastName=Danger’/>
<embed src=’TitleTest.mxml.swf?myName=Danger’ … />   
</object>
2.或者在<Object>和<embed>中的src属性中直接加参数,例如:
<object … >
    <param name=’src’ value=’TitleTest.mxml.swf?myName=Danger’>
    …
    <embed src=’TitleTest.mxml.swf?myName=Danger’ … />
</object>
3.如果通过url直接访问Flash,可以直接再后面加参数,例如:
http://localhost:8100/flex/myApp.swf?myName=Nick&myHometown=San
如何在Flex中读取这些参数:
可以用Application.application.parameters或LoaderConfig.parameters获得外部参数。
但是切忌:只能在Application部署完成之后才能获取这些参数。也就是在派发creationComplete之后才能获得。例如:
<mx:Application xmlns:mx=”http://www.adobe.com/2006/mxml” width=”100%” height=”100%”
layout=”absolute” creationComplete=”initApp()”  initialize=”init()”>
<mx:Script>
<![CDATA[
import mx.core.Application
private function init():void
{
trace(Application.application.parameters["id"]);//输出undefined证明获取参数失败
}
private function initApp():void
{
trace(Application.application.parameters["id"]);
trace(this.parameters["id"]);// 这样写也行
}
]]>
</mx:Sctipt>
</mx:Application>




欢迎光临 应用思考-教育技术论坛 (http://etthink.com/) Powered by Discuz! X3.4