2010年1月7日 星期四

JavaScript調用ActionScript

ExternalInterfaceaddCallback(functionName:String, closure:Function):void
可以用來讓JavaScript呼叫ActionScript使用,範例如下

//Flex 部分
<?xml version="1.0" encoding="utf-8"?>
<mx:Application creationComplete="init();" xmlns:mx=http://www.adobe.com/2006/mxml
layout="vertical" width="300" height="300">
    <mx:Script>
     <![CDATA[
       import mx.controls.Label;
       import mx.controls.TextInput;
       private function init():void
       {
           ExternalInterface.addCallback("callAs", callAs);
       }
       private function allAs(v1:Object=null,v2:Object=null):void
       {
          var t1:TextInput = new TextInput( );
              t1.text = v1.toString( );
          var l1:Label = new Label( );
              l1.text = v2.toString( );

              box.addChild(t1);
              box.addChild(l1);
       }
     ]]>
</mx:Script>
<mx:VBox id="box" />>
</mx:Application>

//HTML 部分
  • 於<head> </head>標籤之間加入以下片段
<!-- 這是 JS call As3的測試運作碼 -->
<script language="JavaScript" type="text/javascript">
function thisMovie(movieName)
{
    if (navigator.appName.indexOf("Microsoft") != -1)
    {
         return window[movieName];
    }else
    {
         return document[movieName];
    }
}

function callAs(value,value2)
{
      thisMovie("main").callAs(value , value2);
}

</script>
 
  • 於<body></body>標間之間加入如下片段 
<div align="center"> <h1> HTML </h1></div>
<div align="center">
<input type="Button" value="addMedia" onClick="callAs(out.value,'Flex');" />
<input id="out" type=text value="Mr. & Mrs. Smith">
</div>
  • 注意請將找到AC_FL_RunContent( )內之"id", "${application}"改成"id", "main",。
  • <noscript></noscript>標籤內找到<param name="movie" value="${swf}.swf" />將其改成<param name="movie" value="main.swf" />
這是Flex Bulider執行Run之後的畫面






















這是按下按鈕之後的畫面,會將HTML中文字欄位的值設給Swf中的文字欄位。



















按鈕顯示addMedia是因為自己在做另一個測試,忘了把字改掉,將就一下囉!

沒有留言:

張貼留言