flex和js进行参数传递
來著:http://www.cnblogs.com/Cnol/archive/2009/09/20/1570365.html
?
?方法一:flex接收網頁傳值!~
?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方法
????varurl,pos,parastr,para;
????url?=window.location.href;
????pos?=url.indexOf("?")
????parastr?=url.substring(pos+1);
????returnparastr;
?}
在?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代碼了^_^)
這個方法的唯一不足在于需要知道傳過來的參數的名字。而我作了一些改動,將其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";
trace(myAssocArray.initial); ? // Output: Q?
參考資料:
flex接收網頁傳值!~?
flex 3 從頁面url中取參數取值的完美解決方案?
flex程序如何獲取html容器傳遞的URL參數值
Flex學習--Object&&String
轉載于:https://www.cnblogs.com/zhangliang0115/archive/2012/02/18/2357036.html
總結
以上是生活随笔為你收集整理的flex和js进行参数传递的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 年龄大了学Java是爱好还是转型?
- 下一篇: 每天一个linux命令(54):ping