flash AS與JavaScript互動執行個體程式

來源:互聯網
上載者:User

ActionScript調用javaScript

需要引入flash.external.ExternalInterface,這裡要用到ExternalInterface類的call方法:

ExternalInterface.call(functionName:String,…arguments):*,fuctionName:

要調用的Javascript函數名,arguments:參數,可選。

調用由 Flash Player 容器公開的函數,傳遞零個或多個參數。如果所需的函數不可用,則調用返回 null;否則,它返回由該函數提供的值。不允許使用遞迴;遞迴調用會產生 null 響應。

如果容器是 HTML 頁,則此方法在<script> 元素中調用 JavaScript 函數。

如果該容器是其它某個 ActiveX 容器,則此方法會使用指定的名稱廣播事件,並且該容器會處理該事件。

如果該容器承載 Netscape 外掛程式,您可以寫入對新 NPRuntime 介面的自訂支援或嵌入 HTML 控制項以及在 HTML 控制項內嵌入 Flash Player。如果嵌入 HTML 控制項,就可以通過與本機容器應用程式通迅的 JavaScript 介面與 Flash Player 進行通訊。

JavaScript調用ActionScript


需要引入flash.external.ExternalInterface,這要用到ExternalInterface類的addCallback方法:

ExternalInterface.addCallback( functionName:String, closure:Function):void,functionName:

要註冊的函數名,closure:對應的執行函數。

ActionScript 方法註冊為可從容器調用,成功調用 addCallBack() 後,容器中的 JavaScript 或 ActiveX 代碼可以調用在 Flash Player 中註冊的函數。

在包含 SWF 檔案的 HTML 頁中,在該檔案的 object 標籤中設定參數:

 代碼如下 複製代碼

 <param name="allowScriptAccess" value="always" />

在 SWF 檔案中,添加以下 ActionScript:

 flash.system.Security.allowDomain(sourceDomain )

這2個說明為瞭解決安全沙箱的問題,但是實際使用中,我們常常還會遇到更加頭疼的問題。

具體執行個體

Interactive.fla

建立 fla 檔案,舞台大小為300*80,顏色為#CCCCCC,類指定為Interactive;
位置(10,15)處添加260*22大小的Label label;
位置(10,50)處添加170*22大小的TextInput textInput;
位置(190,50)處添加100*22大小的Button button。
 

 代碼如下 複製代碼

<html>
<head>
<script type="text/javascript" src="Interactive.js"></script>
</head>
<body>
 <table><tr><td>
  <object id="asFunction" data="Interactive.swf"
   type="application/x-shockwave-flash" width="300" height="80">
  </object>
 </td></tr><tr><td>
  <input id="jsInput" type="text" />
  <input type="button" value="調用AS" onclick="callAs()" />
 </td></tr></table>
</body>
</html>
 

 

function jsMethod(arg) {
 alert("as 調用 js 成功,參數為:" + arg);
 return ("as 調用 js 成功!");
}

function callAs() {
 var myFlexfun = document.getElementById("asFunction");
 var result = myFlexfun.callAs(jsInput.value);
 alert("傳回值:" + result);
}

 

package
{
 import flash.display.Sprite;
 import flash.events.MouseEvent;
 import flash.external.ExternalInterface;
 public class Interactive extends Sprite
 {
  public function Interactive()
  {
   init();
  }
  private function init():void
  {
   // 將方法 asMethod 註冊為可從容器調用
   ExternalInterface.addCallback("callAs",asMethod);
   button.addEventListener(MouseEvent.CLICK,buttonClick);
  }
  private function buttonClick(event:MouseEvent):void
  {
   trace(textInput.text);
   label.text = "as 調用 js ...";
   var result:String = callJS(textInput.text);
   label.text = "傳回值:" + result;
  }
  // ActionScript 調用 JavaScript;
  private function callJS(arg:String):String
  {
   // 調用指定的 JavaScript 端的函數,並順序指定傳遞給 JavaScript 端函數的參數
   return ExternalInterface.call("jsMethod",arg);
  }
  // JavaScript 調用 ActionScript 時,ActionScript 端的函數;
  private function asMethod(arg:String):String
  {
   label.text = arg;
   return "js 調用了 as 成功!";
  }
 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.