Flex與Html互動獲得參數
1. 在html頁麵包含swf
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
id="${application}" width="${width}" height="${height}"
codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab">
<param name="movie" value="${swf}.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="${bgcolor}" />
<param name="allowScriptAccess" value="sameDomain" />
<param name="FlashVars" value="param1=one¶m2=2¶m3=3¶m4=four" />
<embed src="${swf}.swf" quality="high" bgcolor="${bgcolor}"
width="${width}" height="${height}" name="${application}" align="middle"
play="true"
loop="false"
quality="high"
allowScriptAccess="sameDomain"
type="application/x-shockwave-flash"
pluginspage="http://www.adobe.com/go/getflashplayer"
FlashVars
="param1=one¶m2=2¶m3=3¶m4=four"
</embed>
</object>
這裡關鍵是FlashVars="param1=one¶m2=2¶m3=3¶m4=four"
這FlashVars把參數傳給了swf檔案
2. flex中函數
private function onCreationComplete() : void
{
var parameters : Object = Application.application.parameters;
var param1 : String = parameters.param1;
var param2 : int = parseInt( parameters.param2 );
var param3 : int = parseInt( parameters.param3 );
var param4 : String = parameters.param4;
output.text = "param1: " + param1 + "/n" +
"param2: " + param2 + "/n" +
"param3: " + param3 + "/n" +
"param4: " + param4;
}
在flex中用Application.application.parameters來擷取上面所傳的參數
轉自:http://blog.csdn.net/friendyi/archive/2008/07/15/2651777.aspx
------------------------------------------------------------------------------------------------------------------
Flex與JavaScript的互動
一、在JavaScript中調用Flex方法
在 Flex
應用中,需要在方法列表中添加指定的公用方法,這樣Flex中的方法才能被JS調用到。在Flex中需要通過調用addCallback()可以把一個方
法添加到此列表中。 addCallback將一個ActionScript的方法註冊為一個JavaScript和VBScript可以調用的方法。
addCallback()函數的定義如下:
addCallback(function_name:String, closure:Function):void
function_name參數就是在Html頁面中指令碼調用的方法名。closure參數是要調用的本地方法,這個參數可以是一個方法也可以是對象執行個體。
舉個例子:
view source
print
?
01.
<mx:script>
02.
import flash.external.*;
03.
public
function
myFunc():Number {
04.
return
83;
05.
}
06.
public
function
initApp():void {
07.
ExternalInterface.addCallback(
"myFlexFunction"
,myFunc);
08.
}
09.
</mx:script>
那麼在Html頁面中,先獲得SWF對象的引用,也就是用
view source
print
?
1.
<
object
...id
=
"MyFlexApp"
></
object
>
聲明的Swf的Id屬性,比如說是MyFlexApp。然後就可以用以下方式調用Flex中的方法。view source
print
?1.
<script language=
"JavaScript"
>
2.
function
callApp() {
3.
var
x = MyFlexApp.myFlexFunction();
4.
alert(x);
5.
}
6.
</script>
view source
print
?1.
<
input
onclick
=
"callApp()"
value
=
"Test"
type
=
"button"
>
二、在Flex中調用 JavaScript
同樣,我們也可以調用Html頁面中的JavaScript,通過與JavaScript的互動,可以改變Style,調用遠程方法。還可以將資料傳遞給
Html頁面,處理後再返回給Flex,完成這樣的功能主要有兩種方法:ExternalInterface()和navigateToUrl()。
在Flex中調用JavaScript最簡單的方法是使用ExternalInterface(),可以使用此API調用任意JavaScript,傳遞參數,獲得傳回值,如果調用失敗,Flex拋出一個異常。
ExternalInterface封裝了對瀏覽器支援的檢查,可以用available屬性來查看。
ExternalInterface的使用非常簡單,文法如下:
flash.external.ExternalInterface.call(function_name: String[, arg1, ...]):Object;
參數function_name是要調用的JavaScript的函數名,後面的參數是JavaScript需要的參數。
舉個例子說明如何調用JavaScript函數
Flex應用中,添加如下方法:view source
print
?01.
<mx:script>
02.
03.
<mx:application xmlns:mx=
"http://www.adobe.com/2006/mxml
"
>
04.
<mx:script>
05.
import flash.external.*;
06.
07.
public
function
callWrapper():void {
08.
var
f:String =
"changeDocumentTitle"
;
09.
var
m:String = ExternalInterface.call(f,
"New Title"
);
10.
trace(m);
11.
}
12.
</mx:script>
13.
<mx:button label=
"Change Document Title"
click=
"callWrapper()"
>
14.
</mx:button></mx:application></mx:script>
Html頁面中有如下函數定義:view source
print
?1.
<script language=
"JavaScript"
>
2.
function
changeDocumentTitle(a){
3.
window.document.title = a;
4.
return
"successful"
;
5.
}
6.
</script>
轉自:http://www.idceye.com/index-blog-view-id216.html
------------------------------------------------------------------------------------------------------------------------------------
Flex程式與封裝頁面(wrapper)通訊方法小結
Flex通常作為一個web項目的一部分嵌入到一個web頁中,因此Flex程式和web頁面的通訊就變得非常重要。
1) Flex提供了多種方法實現Flex程式和封裝頁面的互動,主要有:flashVars屬性,查詢字串參數,navigateToURL()方法,以及flash.external.ExternalInterface類。2) Flex程式
擷取環境資訊:Application.application.url擷取封裝頁面的URL,以及使用@ContextRoot()
;
以及可以通國 flash.system.Capacities擷取到有關係統的一些資訊,比如版本、語言、作業系統等;3)
flashVars用來從外部封裝頁面向Flex程式傳送資料: 在封裝頁面傳入參數值:AC_FL_RunContent(flashVars, “para1=value1&…¶n=valuen”)或者<Object> <param name=”movie” value=”wrapper.swf? para1=value1 /> <embed src=”wrapper.swf?para1=value1/> </Object> 然後flex
程式裡通過 Application.application.parameters.para1擷取參數值;4)
ExternalInterface提供方法使Flex程式和外部的封裝頁面可以相互調用對方的方法,外部介面類要受到域安全性設定(allowScriptAccess, allowNetworking)的約束。先判斷ExternalInterface是否可用:ExternalInterface.available;flex調用js:ExternalInterface.call(funName, funPara1, …, funParaN);js調用flex:首先flex裡面用ExternalInterface.addCallback(“jsFunName”,asFun),將AS裡面定義的函數賦予一個js裡面調用的函數的名字jsFunName;然後在js裡面用mySwf.jsFunName()調用flex裡面提供的函數asFun;ExternalInterface安全性:一般來說js和flex的訪問局限於同一個域之內。可以設定<Object>和<Embed>的allowScriptAccess=”value”(value取值:never, always, sameDomain預設)來設定flex訪問js的許可權。至於js對於flex方法的訪問只有flex裡面通過addCallback的js才可以訪問,對於跨域,可以試用allowDomain()函數設定。5)
navigateToURL() 可以用來開啟一個新的瀏覽器視窗,也可以用來flex和js之間的通訊。比如: 開啟一個新視窗:var url:URLRequest
= new URLRequest(http://blog.csdn.net
);navigateToURL(url, _blank);這個函數也可以用來執行js,例如:var url:URLRequest
= new URLRequest(“javascript:window.close()”); 或者:var urlLURLRequest = new URLRequest(“javascript:myFun(para1…paran)”)myFun()函數是html頁面的script部分定義的,函數參數一定要有引號!navigateToURL(url, _self);也可以用來發送email:var urlURLRequest = new URLRequest(mailto:zoushun@hotmail.com
);navigateToURL(url, _blank);
轉自:http://blog.csdn.net/arshoon/archive/2008/06/11/2533982.aspx