Как получить доступ к параметрам запроса html во внешнем mxml - PullRequest
2 голосов
/ 08 февраля 2012

Из формы 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-код и каков соответствующий код ActionScript, который входит в функцию init ()?

Или, по крайней мере, для чего мне гуглить?

Примечание. Очевидно, что параметры и значения не отображаются в URL-адресе браузера. В противном случае это было бы легко.

Также обратите внимание, что приложение не встроено в исходную HTML-страницу, хотя 99,9% результатов поиска, которые я нашел по этой теме, дают пример того, что делать, если оно было.

В идеале исходный запрос должен быть запросом POST, но, очевидно, flex не может обрабатывать почтовые запросы.

Я пробовал flashvars безрезультатно (хотя и не совсем уверен в формате HTML, если он не отправляет во встроенный SWF внутри HTML - и, как я уже сказал, нашел сотни примеров, если это так)

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 Ответ

1 голос
/ 08 февраля 2012

погуглив это, я нашел следующий пример:
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-приложение.

Ваш 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 для его кодирования.

...