一直沒去深入研究下AS與JS的交互開發也就是SWF在html中的通信最近出於項目要求被迫投入了也在這裡做個匯總
一:HTML中最快速的傳值方式
在HTML中插SWF時可以跟個參數比如:
files/homeswf?id=”″
在AS裡可以這樣去接收
var id:String=stageloaderInfoparameters["id"]; 這種傳值方式其實AS的時候也是這樣做的到AS時使用parameters 屬性替換了AS 和 提供SWF文件參數作為主時間軸的技術所以我們改用一下AS的取值方式就行了
這種方式只能是單邊一次性傳值有時候會用得到但需要與JS相互通信就不行了還有只能接收字符串
二:使用外部通信接口ExternalInterface
這也是AS時代進化來的目前公認的最靠譜的通信方式
使用方法:
JS調用AS的函數
確定JS調用AS之前要在AS中綁定調用函數也就是說只有AS答應給的方法JS才能調用
使用:ExternalInterfaceaddCallback(functionName:String closure:Function):void有兩個參數:
functionName:String — 容器可用於調用函數的名稱
closure:Function — 要調用的 closure 函數 這可能是一個獨立的函數或者可能是引用對象實例方法
ExternalInterfaceaddCallback("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") !=
) { return window[movieName]; } else { return document[movieName]; } } thisMovie("mov")
getASVars(value);
AS
調用JS的函數
AS調JS直接使用call就行了
使用:ExternalInterfacecall(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 及更高版本 Windows
Netscape 及更高版本 Windows Macintosh
Mozilla 及更高版本 Windows Macintosh
Firefox 及更高版本 Windows Macintosh
Safari 及更高版本 Macintosh
還有個安全沙箱的問題如果出現安全沙箱警報可以使用以下兩種修正方法:
在包含 HTML 頁中的 SWF 文件的 object 標簽中設置以下參數
在 SWF 文件中添加以下 ActionScript
代碼如下:
Flash
system
Security
allowDomain(sourceDomain)
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20074.html