萬盛學電腦網

 萬盛學電腦網 >> 腳本專題 >> javascript >> AS3與JS之間的簡單自定義參數通訊

AS3與JS之間的簡單自定義參數通訊

  一直沒去深入研究下AS3與JS的交互開發也就是SWF在html中的通信,最近出於項目要求被迫投入了,也在這裡做個匯總.

  一:HTML中最快速的傳值方式

  在HTML中插SWF時,可以跟個參數,比如:

  files/home.swf?id=”21″

  在AS3裡可以這樣去接收

  var id:String=stage.loaderInfo.parameters["id"]; 這種傳值方式其實AS2的時候也是這樣做的,到AS3時使用parameters 屬性替換了AS1.0 和2.0 提供SWF文件參數作為主時間軸的技術,所以我們改用一下AS3的取值方式就行了.

  這種方式只能是單邊一次性傳值,有時候會用得到,但需要與JS相互通信就不行了,還有,只能接收字符串.

  二:使用外部通信接口ExternalInterface

  這也是AS2時代進化來的,目前公認的最靠譜的通信方式.

  使用方法:

  1.JS調用AS3的函數

  確定JS調用AS3之前,要在AS3中綁定調用函數,也就是說,只有AS3答應給的方法JS才能調用.

  使用:ExternalInterface.addCallback(functionName:String, closure:Function):void有兩個參數:

  functionName:String — 容器可用於調用函數的名稱。

  closure:Function — 要調用的 closure 函數。 這可能是一個獨立的函數,或者可能是引用對象實例方法

ExternalInterface.addCallback("getASVars",getASFun);
private function getASFun(value:String):void {
//得到JS傳來的值:value
}

  好了,可以在JS中去調用這個方法了,調用前還要先取得插進HTML的SWF的ID,我們在HTML中不管用什麼方式插都可以設置ID

  例如先通過id為”mov”來獲取對象,再調用上面綁定的方法:

代碼如下: function thisMovie(movieName) { if (navigator.appName.indexOf("Microsoft") != -1) { return window[movieName]; } else { return document[movieName]; } } thisMovie("mov").getASVars(value); 2.AS3調用JS的函數    

  AS3調JS直接使用call就行了

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

  這個方法有兩個參數:

  functionName:String — 要在容器中調用的函數的名稱。

  … arguments — 傳遞到容器中的函數的參數。 您可以指定零個或多個參數,參數之間用逗號分隔。 這些參數可以是任何 ActionScript 數據類型。 當調用 JavaScript 函數時,ActionScript 類型自動封裝到 JavaScript 類型中;當調用其它某個 ActiveX 容器時,將在請求消息中對參數進行編碼。

  例如:

代碼如下: ExternalInterface.call("setToJS","paramTest"); //在JS中編寫這個setToJS的函數 function senToJS(value){ alert(value)//輸出:paramTest }  
看起來很爽,但也不是完全靠譜,這個接口還是會挑食的,只有在以下浏覽器中才支持:
 
浏覽器 操作系統 操作系統
Internet Explorer 5.0 及更高版本 Windows
Netscape 8.0 及更高版本 Windows Macintosh
Mozilla 1.7.5 及更高版本 Windows Macintosh
Firefox 1.0 及更高版本 Windows Macintosh
Safari 1.3 及更高版本 Macintosh
 
還有個安全沙箱的問題,如果出現安全沙箱警報,可以使用以下兩種修正方法:
1.在包含 HTML 頁中的 SWF 文件的 object 標簽中,設置以下參數:
 
2.在 SWF 文件中,添加以下 ActionScript:

代碼如下: Flash.system.Security.allowDomain(sourceDomain)



 

						
copyright © 萬盛學電腦網 all rights reserved