【问题标题】:How to access html request parameters in external mxml如何访问外部mxml中的html请求参数
【发布时间】:2012-02-08 05:13:38
【问题描述】:

从一个 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.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 代码是什么?

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

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

另外请注意,该应用程序并未嵌入到原始 HTML 页面中,尽管我在该主题上找到的 99.9% 的搜索结果都提供了一个示例,说明如果嵌入了该应用程序该怎么做。

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

我尝试过 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 时却没有运气。我显然缺少一些基本的东西。

【问题讨论】:

    标签: html apache-flex actionscript mxml


    【解决方案1】:

    谷歌搜索我发现了以下示例:
    http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf626ae-7feb.html

    有一个代码 sn-p 应该跟踪所有传递的 `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>
    

    您必须添加两次 flashvar,而不仅仅是一次。我真的不知道 flashvars 是否像您在示例中添加的 '&lt;space&gt;

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

    【讨论】:

    • 感谢 pkyeck。我曾尝试过这个例子,但没有成功。 ta1 元素的内容始终是:'i:13287332432'。一个 'i:' 后跟一堆数字('i:' 只是巧合,将行更改为 ta1.text += j + "-->" + FlexGlobal... 仍然会导致 'i:123123 ')
    • 另外,我仍然认为我的 html 不正确。与 html 输入表单相关的对象标记及其内容在哪里?当我通过提交按钮启动应用程序时,完全删除对象标签仍会导致“i:123234213”。谢谢
    • 我以为你有两个 html 文件:1. 作为表单和 2. 嵌入 SWF。对?!在第二个中,您必须从 FORM 中获取 POST 数据并将它们传递给 SWF 对象。但是你为什么要在 html 中做 FORM 而不是将它包含到你的 flash 应用程序中?会更容易,你不必从 html->flash 传递参数。
    • 啊,好的,所以我刚刚遇到了 index.template.html 文件,其中包含所有嵌入的内容。那就是我所缺少的。我认为 index.mxml 是驱动 index.html 的原因。鸡蛋在脸上。也就是说,我决定尝试让我们的网络服务器驱动它,设置 cookie 等。感谢您的时间
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 2012-08-01
    • 1970-01-01
    • 2023-04-04
    • 1970-01-01
    • 2020-04-07
    • 1970-01-01
    相关资源
    最近更新 更多