2012-02-08 26 views
2

從HTML表單中,我希望啓動我的現有工作flex應用程序,傳遞參數E.G,登錄信息。如何在外部mxml中訪問html請求參數

可以說我有一個簡單的HTML頁面,根本沒有FLASH。

<h1>Test sending parameters</h1> 
    <form name="login" action="http://example.com/myflexApp/index.html" 
          target="_new" method="POST"> 
    username: <input type="text" name="username" /> 
    password: <input type="text" name="password" /> 
    <input type="submit" value="Submit" /> 
</form> 

這將在一個新的瀏覽器窗口中打開了我的第一次應用

我index.mxml其中編譯創建的index.html看起來像這樣(簡化):

<?xml version="1.0" encoding="utf-8"?> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      ... 
      creationComplete="init(event)" xmlns:omp="omp.*"> 
    <fx:Style source="defaults.css"/> 
    <fx:Script> 
    <![CDATA[ 
     import ... 

     protected function init(event:FlexEvent):void 
     { 
      if (params[username] && params[password])//psuedo code 
      { 
      Alert.show(params[username],params[password]);//debugging 
      //login(params[username],params[password]);//psuedo code to log in automatically 
      }else{ 
      //existing code to show login form which works 
      } 
     } 
    ]]> 
    </fx:Script> 
    <mx:ViewStack id="vs" width="100%" height="100%" ...> 
    </mx:ViewStack> 
</s:Application> 

那麼,html代碼應該是什麼樣子,以及init()函數中相應的actionscript代碼是什麼?

或者,至少我應該使用Google搜索嗎?

注:顯然,瀏覽器的URL地址中顯示參數和值是不可接受的。否則,這將很容易。

另請注意,該應用程序未嵌入到原始HTML頁面中,但我在該主題中找到的搜索結果中的99.9%給出瞭如果發生該操作的示例。

理想情況下,原始請求將是一個POST請求,但顯然flex不能處理post請求。

我已經試過Flash變數無濟於事(雖然不能完全肯定的HTML格式的,如果它不發送到HTML中嵌入的SWF - 就像我說的,找到的例子100的,如果它是)

HTML:

<param name="flashvars" value="test='default text'" /> 

MXML:

if (FlexGlobals.topLevelApplication.parameters.hasOwnProperty("username")) 
{ 
Alert.show(FlexGlobals.topLevelApplication.parameters.username); 
} 

//Alert.show(LoaderInfo(this.root.loaderInfo).parameters.username);//also fails 

在大多數其他語言這麼簡單,我有但與FLEX沒有運氣的工作。我顯然缺少一些基本的東西。

回答

1

谷歌上搜索這個我發現下面的例子:
http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf626ae-7feb.html

有一個代碼段應跟蹤所有經過`flashVars``

<?xml version="1.0" encoding="utf-8"?> 
<!-- wrapper/FlashVarTest.mxml --> 
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:mx="library://ns.adobe.com/flex/mx" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    creationComplete="init()"> 

    <s:layout> 
     <s:HorizontalLayout/> 
    </s:layout> 

    <fx:Script><![CDATA[ 
     import mx.core.FlexGlobals; 

     private function init():void { 
       for (var i:String in FlexGlobals.topLevelApplication.parameters) { 
       ta1.text += i + ":" + FlexGlobals.topLevelApplication.parameters[i] + "\n"; 
       } 
      } 
     ]]></fx:Script> 

     <s:Label text="flashVars"/> 
     <s:RichText id="ta1" width="300" height="200"/> 

</s:Application> 

也許嘗試這第一個,你會看到什麼你傳遞給你的flex-app的參數。

你的HTML應該是這個樣子:

<html> 
<head> 
<title>code/wrapper/SimplestFlashVarTestWrapper.html</title> 
<style> 
    body { 
     margin: 0px; 
     overflow:hidden 
    } 
</style> 
</head> 
<body scroll='no'> 
<table width='100%' height='100%' cellspacing='0' cellpadding='0'><tr><td valign='top'> 

<h1>Simplest FlashVarTest Wrapper</h1> 

    <object id='mySwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' height='100%' width='100%'> 
     <param name='src' value='FlashVarTest.swf'/> 
     <param name='flashVars' value='username=Nick&password=Danger'/> 
     <embed name='mySwf' src='FlashVarTest.swf' height='100%' width='100%' flashVars='username=Nick&password=Danger'/> 
    </object> 

</td></tr></table> 
</body> 
</html> 

你必須添加的flashvars兩次,不只是一次。而且我不知道你的示例中是否添加了'<space>等flashvars。

另一件事:你不想將你的用戶的密碼作爲明文發佈 - 使用一些md5-hash來對它進行編碼。

+0

謝謝pkyeck。我曾嘗試過這個例子,但沒有成功。 ta1元素的內容總是:'我:13287332432'。'i:'後跟一堆數字('i:'只是巧合,將行改爲ta1.text + = j +「 - >」+ FlexGlobal ...仍然會導致'i:123123 ') – user1196263 2012-02-08 20:44:36

+0

此外,我仍然認爲我沒有得到正確的HTML。 object標籤和它的內容與html輸入表單有關的地方在哪裏?當我通過提交按鈕啓動應用程序時,完全刪除對象標籤仍會導致「我:123234213」。謝謝 – user1196263 2012-02-08 20:54:37

+0

我以爲你有兩個html文件:1.作爲窗體和2.嵌入SWF。對?!在第二步中,您必須從FORM獲取POST數據並將它們傳遞給SWF對象。但你爲什麼試圖在HTML中做FORM,而不是將其包含到你的Flash應用程序中?會更容易,你不必從html-> flash傳遞參數。 – pkyeck 2012-02-08 22:41:29