Flex從頁面url獲取參數 flex與html交互1

 

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

 

親測方法3可用php

 

關於flex如何向某個頁面傳遞參數,我之前有這方面的筆記,flex經過非AmfPHP途徑與後臺交互URLLoader+URLRequest+URLVariables方法也能夠用於向flex頁面傳參數。後臺php端接收參數很簡單,如今討論一下flex端如何處理頁面url傳遞過來的參數。
網上這方面文章很多,不過都多少有些問題,我總結一下,寫在這裏。
方法一:flex接收網頁傳值!~ html

Code
 1<?xml version="1.0" encoding="utf-8"?>
 2<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
 3   applicationComplete="initApp()">
 4  
 5<mx:Label text=
 6"Will run the app deployed at http://{serverURL}:{port}/MyGreatApp.html" />
 7<mx:Script>
 8   <![CDATA[
 9       [Bindable]
10       var serverURL:String;
11      
12       [Bindable]
13       var port:String;
14      
15       function initApp():void{
16           serverURL=Application.application.parameters.serverURL;
17           port=Application.application.parameters.port
18       }
19   ]]>
20</mx:Script>
21</mx:Application>java

做者在文章最後寫:外部以test.swf?serverURL=String&port=String 的形式在網頁中調用!
這樣作確實沒有問題,但平時的flex程序都是以html爲容器將swf文件包裝了起來。若是用test.html?serverURL=String&port=String的方式傳遞參數,再用該文章中提供的代碼就不能獲取參數了。數組

 

 


方法二:flex 3 從頁面url中取參數取值
這個方法是園子裏的人提出的。
當經過http://xxxxx/xxx.mxml?name=hermithttp://xxxxx/xxx.swf?name=hermit時,能夠直接調用this.parameters.nameflex裏面取url參數。
當經過http://xxxxx/xxx.html?name=hermit時則須要修改js文件才能夠繼續使用this.parameters.name
頁面中加入js方法瀏覽器

  function getparafromurl() {
    
var url,pos,parastr,para;
    url = window.location.href;
    pos = url.indexOf("?")
    parastr = url.substring(pos+1);
    
return parastr;
 }
app

 AC_FL_RunContent中加入函數

"FlashVars", getparafromurl()post

若是頁面是flex builder 經過模板自動生成的
那麼須要在index.template.html文件中加入上面的代碼.
可是若是但願js被禁用的時候,flex依然能工做
則須要把……感興趣的同窗查看原文吧,不太推這種方法。學習

 

 


方法三:flex程序如何獲取html容器傳遞的URL參數值
本方法比較成熟了,把原理講的也很清楚。

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

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

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

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

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

ExternalInterface.call("JavaScript函數");

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

一般使用下面的語句:

window.location.href.toString  //獲得URL的完整文本

 

window.location.search.substring  //獲得問號後面部分的URL文本

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


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

Code
 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 
 8        private var params:Object;
 9 
10        private function init():void {
11            btnID.addEventListener(MouseEvent.CLICK, clickHandler);
12        }
13 
14        private function clickHandler(evt:Event):void {
15            var args:Object = getParams();
16            if(args.name != null && args.address != null) {
17                dispID.text = "name:" + args.name + "\n" + "address:" + args.address;
18            }
19        }
20 
21        private function getParams():Object {
22            params = {};
23            var query:String = ExternalInterface.call("window.location.search.substring", 1);
24            if(query) {
25                var pairs:Array = query.split("&");
26                for(var i:uint=0; i < pairs.length; i++) {
27                    var pos:int = pairs[i].indexOf("=");
28                    //Alert.show(String(pos));
29                    if(pos != -1) {
30                        var argname:String = pairs[i].substring(0, pos);
31                        var value:String = pairs[i].substring(pos+1);
32 
33                        params[argname] = value;
34                    }
35                }
36            }
37            return params;
38        }
39    ]]>
40</mx:Script>
41    <mx:Button id="btnID" y="118" label="GetParams" horizontalCenter="0"/>
42    <mx:TextArea id="dispID" y="47" width="200" horizontalCenter="0"/>
43 
44</mx:Application>

這個方法的惟一不足在於須要知道傳過來的參數的名字。而我做了一些改動,將其16-18行用一個for/in語句代替:

1 for(var obj:Object in args){
2     dispID.text += obj.toString()+':'+args[obj.toString()]+'\n';
3 }

這其中遇到了object對象的取值問題,參考了:Flex學習--Object&&String
建立Object的方法很簡單,你可使用new操做符定義一個Object,以下所示:

var obj:Object = new Object();

obj.name = 「flex」;

obj.version = 「2」;

這裏,咱們生成了一個新Object對象obj,它有兩個屬性nameversion。固然,咱們也能夠經過賦初值的方式直接定義Object對象:

var obj:Object = {name: 」flex」, version: 「2」}

可能你已經看到,Object正是FLEX中的關聯數組(對應於Java中的Map)。在上面的示例中,obj對象共定義了兩組鍵、值對,它們分別是(鍵:name,值:flex)以及(鍵:version,值:2)。我還想告訴你的是,Object的使用方式比Map更簡單。你既能夠經過.訪問,也能夠經過[]訪問鍵值。例如:

var myAssocArray:Object = {fname:"John", lname:"Public"};

trace(myAssocArray.fname);     // Output: John

trace(myAssocArray["lname"]); // Output: Public

myAssocArray.initial = "Q";

trace(myAssocArray.initial);   // Output: Q

 

 

 

 


js獲取url參數值

今天碰到要在一個頁面獲取另一個頁面url傳過來的參數,一開始很本能的想到了用 split("?")這樣一步步的分解出須要的參數。

後來想了一下,確定會有更加簡單的方法的!因此在網上找到了兩個很又簡單實用的方法,mark下

方法一:正則分析法

 

         
function getQueryString(name) { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; }

這樣調用:

         
alert(GetQueryString("參數名1")); alert(GetQueryString("參數名2")); alert(GetQueryString("參數名3"));

方法二:

?
<SPAN style= "FONT-SIZE: 16px" ><Script language= "javascript" >
function GetRequest() {
    var url = location.search; //獲取url中"?"符後的字串
    var theRequest = new Object();
    if (url.indexOf( "?" ) != -1) {
       var str = url.substr(1);
       strs = str.split( "&" );
       for ( var i = 0; i < strs.length; i ++) {
          theRequest[strs[i].split( "=" )[0]]=unescape(strs[i].split( "=" )[1]);
       }
    }
    return theRequest;
}
</Script></SPAN>

這樣調用:

複製代碼
         
<Script language="javascript"> var Request = new Object(); Request = GetRequest(); var 參數1,參數2,參數3,參數N; 參數1 = Request['參數1']; 參數2 = Request['參數2']; 參數3 = Request['參數3']; 參數N = Request['參數N']; </Script>
相關文章
相關標籤/搜索