如何访问外部mxml中的html请求参数

时间:2012-02-08 05:13:38

标签: html flex actionscript mxml

从HTML表单中,我希望启动我现有的工作flex应用程序传递参数E.G,登录详细信息。

假设我有一个简单的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.html的index.mxml看起来像这样(简化):

 <?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代码是什么?

或者,至少我应该在谷歌上搜索什么?

注意:显然,在浏览器的URL地址中显示参数和值是不可接受的。否则这很容易。

另请注意,该应用程序未嵌入原始HTML页面中,但我在此主题中找到的99.9%的搜索结果给出了如果该如何操作的示例。

理想情况下,原始请求将是POST请求,但显然flex无法处理发布请求。

我尝试过flashvars无济于事(虽然不能完全确定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 个答案:

答案 0 :(得分: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,而不仅仅是一次。而我真的不知道flashvars是否与您在示例中添加的'<space>相似。

另一件事:您不希望将用户密码作为明文发布 - 使用某种md5-hash对其进行编码。