从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没有运气。我显然缺少一些基本的东西。
答案 0 :(得分:1)
有一个代码片段应该跟踪所有传递的`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对其进行编码。