Flex 接收HTML以GET方式傳遞的參數

 咱們常常在Flex程序須要用從外部html向swf文件傳遞參數,(相似 test.html?name=jex&address=chengdu 地址中問號後面的參數對值)html

首 先要明確的是,通常咱們在使用Flex Builder進行Flex開發時,編譯後自動以html容器將swf文件包裝起來了,因此通常來講,咱們直接運行的是html,而非直接運行生成的 swf文件。而Flex應用程序要獲取外部html容器傳入的參數,一般是用JavaScript來獲取到相應參數,再讓javaScript傳遞給 ActionScript。java

在Flex應用程序中,咱們一般要用到ExternalInterface 類,ExternalInterface主要用來讓ActionScript直接與Flash Player容器進行通訊。ExernalInterface類一般做爲ActionScript與JavaScript進行通訊的橋樑。瀏覽器

爲了獲取從html傳入的URL參數,一般傳遞的順序是:html容器—>JavaScript—>ExternalInterface—>ActionScriptide

 

具體實現:
在Flex中,經過調用ExternalInterface的call方法,參數爲要調用的JavaScript函數,並返回JS函數調用的結果。如:函數

Xml代碼ui

  1. ExternalInterface.call("JavaScript函數");  

 

在JS中,Window對象用來表明一個Web瀏覽器窗口,而窗口的Location對象則表明了當前顯示的URL,因而,要想獲取URL中的參數,spa

一般使用下面的語句:xml

 

Xml代碼htm

  1. window.location.href.toString   //獲得URL的完整文本  
  2.    
  3. window.location.search.substring  //獲得問號後面部分的URL文本  

 

:這裏window屬性引用的Window對象自身,而Window對象的location屬性引用的是Location對象。對象

 


通 常的參數對以test.html?name=jex&address=chengdu 這樣的形式給出,在獲取到問號後面的URL文本後,還須要 對其分解,這時有兩種途徑,一種是分解過程在JS中完成,而後將最終的結果值傳遞給Flex,另外一種是將分解的過程放在Flex中去完成。在這裏使用的後 者(這樣只需寫AS代碼,而不用去寫JS代碼了^_^)

 

示例程序代碼以下:

Xml代碼 

 

  
  
  
  
  1. <?xml version="1.0" encoding="utf-8"?>   
  2. <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"   
  3.     creationComplete="init()">   
  4. <mx:Script>   
  5.     <![CDATA[ 
  6.          import mx.controls.Alert; 
  7.          private var params:Object; 
  8.          private function init():void { 
  9.              btnID.addEventListener(MouseEvent.CLICK, clickHandler); 
  10.          } 
  11.          private function clickHandler(evt:Event):void { 
  12.              var args:Object = getParams(); 
  13.              if(args.name != null && args.address != null) { 
  14.                  dispID.text = "name:" + args.name + "\n" + "address:" + args.address; 
  15.              } 
  16.          } 
  17.          private function getParams():Object { 
  18.              params = {}; 
  19.              var query:String = ExternalInterface.call("window.location.search.substring", 1); 
  20.              // Alert.show(ExternalInterface.call("window.location.href.toString",1)); 
  21.              // Alert.show(query); 
  22.              if(query) { 
  23.                  var pairs:Array = query.split("&"); 
  24.                  for(var i:uint=0; i < pairs.length; i++) { 
  25.                      var pos:int = pairs[i].indexOf("="); 
  26.                      //Alert.show(String(pos)); 
  27.                      if(pos != -1) { 
  28.                          var argname:String = pairs[i].substring(0, pos); 
  29.                          var value:String = pairs[i].substring(pos+1); 
  30.                          params[argname] = value; 
  31.                      } 
  32.                  } 
  33.              } 
  34.              return params; 
  35.          } 
  36.      ]]>   
  37. </mx:Script>   
  38.     <mx:Button id="btnID" y="118" label="GetParams" horizontalCenter="0"/>   
  39.     <mx:TextArea id="dispID" y="47" width="200" horizontalCenter="0"/>   
  40.     
  41. </mx:Application>   

轉自:http://hi.baidu.com/fandywang_jlu/item/f8fb14dc951dc04ddcf9bee4

相關文章
相關標籤/搜索