[Flex][总结]从页面url获取参数
網上這方面文章不少,不過都多少有些問題,我總結一下,寫在這里。
方法一:flex接收網頁傳值!~
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> 作者在文章最后寫:“外部以test.swf?serverURL=String&port=String 的形式在網頁中調用!”
這樣做確實沒有問題,但平時的flex程序都是以html為容器將swf文件包裝了起來。如果用test.html?serverURL=String&port=String的方式傳遞參數,再用該文章中提供的代碼就不能獲取參數了。
方法二:flex 3 從頁面url中取參數取值的完美解決方案
這個方法是園子里的人提出的。
當通過http://xxxxx/xxx.mxml?name=hermit或http://xxxxx/xxx.swf?name=hermit時,可以直接調用this.parameters.name在flex里面取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;
?} 在?AC_FL_RunContent中加入
"FlashVars",?getparafromurl() 如果頁面是flex builder 通過模板自動生成的
那么需要在index.template.html文件中加入上面的代碼.
但是如果希望js被禁用的時候,flex依然能工作
則需要把……感興趣的同學查看原文吧,不太推這種方法。
方法三:flex程序如何獲取html容器傳遞的URL參數值
本方法比較成熟了,把原理講的也很清楚。
我們經常在Flex程序需要用從外部html向swf文件傳遞參數,(類似 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類通常作為ActionScript與JavaScript進行通信的橋梁。
為了獲取從html傳入的URL參數,通常傳遞的順序是:html容器—>JavaScript—>ExternalInterface—>ActionScript
具體實現:
在Flex中,通過調用ExternalInterface的call方法,參數為要調用的JavaScript函數,并返回JS函數調用的結果。如:
在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代碼了^_^)
?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,它有兩個屬性name和version。當然,我們也可以通過賦初值的方式直接定義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";
參考資料:
flex接收網頁傳值!~
flex 3 從頁面url中取參數取值的完美解決方案
flex程序如何獲取html容器傳遞的URL參數值
Flex學習--Object&&String
轉載于:https://www.cnblogs.com/Cnol/archive/2009/09/20/1570365.html
總結
以上是生活随笔為你收集整理的[Flex][总结]从页面url获取参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全排列递归实现的讨论
- 下一篇: [软件更新]Adobe Photosho