如何在外部mxml中访问html请求参数
从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没有运气的工作。我显然缺少一些基本的东西。
谷歌上搜索这个我发现下面的例子:
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来对它进行编码。
谢谢pkyeck。我曾尝试过这个例子,但没有成功。 ta1元素的内容总是:'我:13287332432'。'i:'后跟一堆数字('i:'只是巧合,将行改为ta1.text + = j +“ - >”+ FlexGlobal ...仍然会导致'i:123123 ') – user1196263 2012-02-08 20:44:36
此外,我仍然认为我没有得到正确的HTML。 object标签和它的内容与html输入表单有关的地方在哪里?当我通过提交按钮启动应用程序时,完全删除对象标签仍会导致“我:123234213”。谢谢 – user1196263 2012-02-08 20:54:37
我以为你有两个html文件:1.作为窗体和2.嵌入SWF。对?!在第二步中,您必须从FORM获取POST数据并将它们传递给SWF对象。但你为什么试图在HTML中做FORM,而不是将其包含到你的Flash应用程序中?会更容易,你不必从html-> flash传递参数。 – pkyeck 2012-02-08 22:41:29