Flex之旅--HTML向Flex传参
? ? ? ? 最近有个需求,要在网站中播放一段介绍性的视频,于是做了一个用Flex播放视频的demo。播放视频的代码是以前在网上找的,但是从html页面获得视频地址的时候参数传递问题浪费了很多时间,现整理总结如下: ? ? ? ? 在Flex中接收参数很简单,通过FlexGlobals.topLevelApplication.parameters或直接用parameters,文档中对parameters的介绍如下:
接收参数代码: private function init():void { if (parameters != null) { var source:String = parameters.source as String; var param2:String = parameters.test as String; } } ? ? ? ??parameters?参数有两个来源Url和FlashVars,分别介绍如下: 新建一个Flex应用程序时会同时新建一个html页面,Flex应用是嵌入到html中的。其中包括javascript和<noscript>标签两部分,只有当浏览器不支持javascript时才会执行<noscript>中的代码。 ? ? ? ? 1.通过url传递参数 这种方式和html url传参一样,swf?param1=param1¶m2=param2代码如下: swfobject.embedSWF( "VideoPlayer.swf?source=http://material.157you.com/material/767/dcf_enc.flv¶m2=test","flashContent","500",swfVersionStr,xiSwfUrlStr,flashvars,params,attributes); <noscript> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="500" id="VideoPlayer"> <param name="movie" value="VideoPlayer.swf?source=http://material.157you.com/material/767/dcf_enc.flv" /> ...... <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="VideoPlayer.swf?source=http://material.157you.com/material/767/dcf_enc.flv¶m2=test " width="500" height="500"> ....... <!--<![endif]--> ...... </object> <noscript>? ? ? ? 2.通过FlashVars传递参数 var flashvars = {}; flashvars.source = "http://material.157you.com/material/767/dcf_enc.flv"; flashvars.param2 = "test"; swfobject.embedSWF( "VideoPlayer.swf",attributes); <noscript> <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="500" height="500" id="VideoPlayer"> <param name="movie" value="VideoPlayer.swf" /> <param name="flashvars" value="source=http://material.157you.com/material/767/dcf_enc.flv¶m2=test" /> ...... <!--[if !IE]>--> <object type="application/x-shockwave-flash" data="VideoPlayer.swf" width="500" height="500"> <param name="flashvars" value="source=http://material.157you.com/material/767/dcf_enc.flv¶m2=test" /> ...... <!--<![endif]--> ...... </object> <noscript>注意:当同时使用url和flashvars传参时,如果参数名相同则flashvars的值会覆盖url的值 ? ? ? ? 以上是通过Flex提供的专门传递参数的方式实现的,还有一种方式也可以实现参数传递,我们知道在Flex中可以调用JS的方法,所以可以在JS中写一个方法,返回值为要传递的参数,这样在Flex中就可以获取到了,这算是曲线救国的一种方法。 JS方法,返回参数params: function flexParams() { var params = {param2:'test'}; params.source = "http://material.157you.com/material/767/dcf_enc.flv"; return params; }Flex中调用JS方法,获得参数: private function init():void { var params:Object = ExternalInterface.call("flexParams"); if (params != null) { var source:String = params.source as String; var param2:String = params.param2 as String; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |