参考文档
1. 关于flex html template wrapper (以后的文章详细讲解): http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf663fe-7fff.html
2. Creating a wrapper: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7ecf.html
3. 通过flashvar property来把request param data传给flexapp: http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf626ae-7feb.html
4. Flex app直接从URL fragments获取:http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7e9c.html
先看如何通过flashvarproperty来把requestparam data传给flexapp:
Step 1 create a flex project
Step 2 open /html-template/index.template.html file, and find following codes
var flashvars ={};
Step 3 add following 2 line codes below it
flashvars.firstname= "Nick";
flashvars.lastname= "Danger";
如果是用JSP page,则可以为
flashvars.firstname= "<%= request.getParameter("firstname")%>";
flashvars.lastname= "<%= request.getParameter("lastname")%>";
还可以通过在swf的file path里添加param来代替上面这2行代码 (下面这种方式和上2行代码的作用一样!选择其中一种方式即可)
<script type="text/javascript">
var swfVersionStr = "0";
var xiSwfUrlStr = "";
var flashvars = {};
var params = {};
params.quality = "high";
params.bgcolor = "#ffffff";
params.allowscriptaccess = "sameDomain";
var attributes = {};
attributes.id = "FlashVarTest";
attributes.name = "FlashVarTest";
attributes.align = "middle";
swfobject.embedSWF(
"FlashVarTest.swf?firstname=Nick&lastname=Danger",
"flashContent", "100%", "100%",
swfVersionStr, xiSwfUrlStr,
flashvars, params, attributes);
</script>
注意:flashVars properties的值必须是URL encoded, 而且该值所包含的参数之间用“&”来连接
Step 4 (optional) 在index.template.html里你还会看到flash object tag <object>在<noscript>file里,要使其使用flashvar,你的<object>应该添加flashvar param
<object id='mySwf' classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' height='100%' width='100%'>
<param name='src' value='FlashVarTest.swf'/>
<param name='flashVars' value='firstname=Nick&lastname=Danger'/>
.......
Step 5 在flex app里如何获取flashvar传来的data
<s:Application ... creationComplete="initVars()">
<fx:Script><![CDATA[
public var firstName:String;
public var lastName:String;
private function initVars():void {
firstName = mx.core.FlexGlobals.topLevelApplication.parameters.firstname;
lastName = mx.core.FlexGlobals.topLevelApplication.parameters.lastname;
}
]]></fx:Script>
.....
</s:Application>
如果要获取flashvar里的所有params,那么使用下列代码
for (var i:String in FlexGlobals.topLevelApplication.parameters) {
label1.text += i + ":" + FlexGlobals.topLevelApplication.parameters[i] + "\n";
}
Step 6 run the flex app
再看如何直接在flex app里解析URL里的param:
Flex app通过BrowserManager and URLUtil来直接获取URL里的paramBrowserManager是一个Singleton管理器,用于充当浏览器和应用程序之间的代理。使用它可以访问浏览器地址栏中的URL,这与访问 JavaScript中的document.location属性类似。当url属性发生更改时调度这些事件。然后侦听器可以响应、更改该URL和/或阻止其它对象获取此事件。
注意:URL里的params是跟在"#"后面,而不是跟在"?"后面!!例如
http://www.mydomain.com/MyApp.html#firstName=Nick&lastName=Danger
Flex app里直接获取URL的param的代码
import mx.managers.BrowserManager;
import mx.managers.IBrowserManager;
import mx.utils.URLUtil;
private function init():void {
var bm:IBrowserManager = BrowserManager.getInstance();
bm.init("", "Welcome!");
//call URLUtil stringToObject method to convert parameters to an object, 第二个参数是param之间的分隔符
//假设URL为http://xxx/MyApp.html#firstName=Nick&lastName=Danger,则分隔符为&
var o:Object = URLUtil.stringToObject(bm.fragment, "&");
label1.text=o.firstName + " " + o.lastName;
}