flex與html互動和js調用

來源:互聯網
上載者:User
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&param2=2&param3=3&param4=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&param2=2&param3=3&param4=four"

    </embed>
</object>

 

這裡關鍵是FlashVars="param1=one&param2=2&param3=3&param4=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&…&paran=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


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.