html网页与flash之间的“静态”和“动态”传值

HTML网页与FLASH之间的“静态”传值

关键字: html网页与flash之间的“静态”传值 我所指的静态传值是区别于与服务端通信进行值传递的方式,例如LoadVars,XML,Remoting之类,后者暂且不在本文的讨论范围内,当你想让 FLASH获取URL中的参数时,你为何不换个角度想了?其实我们可以让服务端动态生成SWF的的插入代码,主动将我们需要的参数“静态”传递给 FLASH,FLASH直接用就可以了,根本不需要自己去拿,而以何种形式传递给FLASH,就是我所指的静态传值。我知道的可行的HTML与 FLASH之间的静态传值方法有三种:

SWF地址后使用参数传递符“?”
FlashVars传递
JS控制

  下面来具体介绍下这三种方式的传递是如何工作的:

   一、SWF地址后使用参数传递符“?”

  我们知道,在ULR地址中使用参数传递符“?”可以以GET方式传递参数,例如http://www.v-sky.com?uid= 12&uname=vsky,这里使用了参数传递符“?”,同时使用了连接符“&”做为变量分隔标识,以这种规范的格式来传递两个参数: uid=12和uname=vsky,那么服务端可以使用GET方式获取这两个值。

  在FLASH中我们同样可以采用类似的方式来传递参数,HTML页面中插入SWF文件最常用的就是使用Object标签和Embed标签结合的方式,这也是Adobe的推荐方式:

以下是代码片段:

Java代码
  1. <object classid= "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  codebase= "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"  width= "400"  height= "300"  id= "flashvars"  align= "middle" >   
  2. <param name="allowScriptAccess"  value= "sameDomain"  />   
  3. <param name="movie"  value= "demo.swf?uid=12&uname=vsky"  />   
  4. <param name="quality"  value= "high"  /><param name= "bgcolor"  value= "#ffffff"  />   
  5. <embed src="demo.swf?uid=12&uname=vsky"  quality= "high"  bgcolor= "#ffffff"  width= "400"  height= "300"  name= "flashvars"  align= "middle"  allowScriptAccess= "sameDomain"  type= "application/x-shockwave-flash"  pluginspage= "http://www.macromedia.com/go/getflashplayer"  />   
  6. </object>   
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle"> 
<param name="allowScriptAccess" value="sameDomain" /> 
<param name="movie" value="demo.swf?uid=12&uname=vsky" /> 
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> 
<embed src="demo.swf?uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object> 



      其中粗体部分对应的就是SWF文件的地址,那么我们可以在这个地址后面通过类似于URL中GET方式传参的方法来个SWF传递参数,例如上面代码在页面完全加载完毕时,它已经给SWF文件写入了两个变量:uid=12和uname=vsky。

   二、FlashVars传递

  你可以查阅FLASH帮助文档来看FlashVars的官方定义。其实在HTML语法中,这是一个被很多新手所忽视的属性,同样以上面的参数为例,下面用FlashVars来传递变量:

以下是代码片段:

Java代码
  1. <object classid= "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"  codebase= "http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0"  width= "400"  height= "300"  id= "flashvars"  align= "middle" >   
  2. <param name="allowScriptAccess"  value= "sameDomain"  />   
  3. <param name="movie"  value= "demo.swf"  />   
  4. <param name="FlashVars"  value= "uid=12&uname=vsky"  />   
  5. <param name="quality"  value= "high"  /><param name= "bgcolor"  value= "#ffffff"  />   
  6. <embed src="demo.swf"  FlashVars= "uid=12&uname=vsky"  quality= "high"  bgcolor= "#ffffff"  width= "400"  height= "300"  name= "flashvars"  align= "middle"  allowScriptAccess= "sameDomain"  type= "application/x-shockwave-flash"  pluginspage= "http://www.macromedia.com/go/getflashplayer"  />   
  7. </object>   
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="400" height="300" id="flashvars" align="middle"> 
<param name="allowScriptAccess" value="sameDomain" /> 
<param name="movie" value="demo.swf" /> 
<param name="FlashVars" value="uid=12&uname=vsky" /> 
<param name="quality" value="high" /><param name="bgcolor" value="#ffffff" /> 
<embed src="demo.swf" FlashVars="uid=12&uname=vsky" quality="high" bgcolor="#ffffff" width="400" height="300" name="flashvars" align="middle" allowScriptAccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /> 
</object> 



      跟方式一相同,它也是直接给FLASH里添加了这两个变量。但我个人推荐使用此方式,结合SWFObject的使用,使用FlashVars来传递变量有 很多好处,例如代码清晰,容易管理,浏览其兼容,符合标准。他们的结合使用在“为FLASH程序构造灵活的接口”一文中我已经做了介绍(PS:随后我会提 供一个复杂点的、有说服力的实际应用来说明这种灵活接口的使用)。

   三、JS控制

  对于客户端页面中的资源,JS通过DOM结构来控制它们可以说是随心所欲的,FLASH也不例外,下面是Flash Player的Javascript方法一览表:

Java代码
  1. Play() —————————————- 播放动画   
  2. StopPlay()————————————停止动画   
  3. IsPlaying()———————————– 动画是否正在播放   
  4. GotoFrame(frame_number)—————- 跳转到某帧   
  5. TotalFrames()——————————- 获取动画总帧数   
  6. CurrentFrame()——————————回传当前动画所在帧数-1    
  7. Rewind()————————————-使动画返回第一帧   
  8. SetZoomRect(left,top,right,buttom)——-放大指定区域   
  9. Zoom(percent)——————————改变动画大小   
  10. Pan(x_position,y_position,unit)————使动画在x,y方向上平移   
  11. PercentLoaded()—————————-返回动画被载入的百分比   
  12. LoadMovie(level_number,path)———– 加载动画   
  13. TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数   
  14. TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签   
  15. TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1    
  16. TCurrentLabel(movie_clip)—————–回传movie_clip当前标签   
  17. TPlay(movie_clip)—————————播放movie_clip   
  18. TStopPlay(movie_clip)———————-停止movie_clip的播放   
  19. GetVariable(variable_name)—————–获取变量   
  20. SetVariable(variable_name,value)———–变量赋值   
  21. TCallFrame(movie_clip,frame_number)—call指定帧上的action   
  22. TCallLabel(movie_clip,label)—————-call指定标签上的action   
  23. TGetProperty(movie_clip,property)——–获取movie_clip的指定属性   
  24. TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性  
Play() —————————————- 播放动画 
StopPlay()————————————停止动画 
IsPlaying()———————————– 动画是否正在播放 
GotoFrame(frame_number)—————- 跳转到某帧 
TotalFrames()——————————- 获取动画总帧数 
CurrentFrame()——————————回传当前动画所在帧数-1 
Rewind()————————————-使动画返回第一帧 
SetZoomRect(left,top,right,buttom)——-放大指定区域 
Zoom(percent)——————————改变动画大小 
Pan(x_position,y_position,unit)————使动画在x,y方向上平移 
PercentLoaded()—————————-返回动画被载入的百分比 
LoadMovie(level_number,path)———– 加载动画 
TGotoFrame(movie_clip,frame_number)- movie_clip跳转到指定帧数 
TGotoLabel(movie_clip,label_name)—— movie_clip跳转到指定标签 
TCurrentFrame(movie_clip)————— 回传movie_clip当前帧-1 
TCurrentLabel(movie_clip)—————–回传movie_clip当前标签 
TPlay(movie_clip)—————————播放movie_clip 
TStopPlay(movie_clip)———————-停止movie_clip的播放 
GetVariable(variable_name)—————–获取变量 
SetVariable(variable_name,value)———–变量赋值 
TCallFrame(movie_clip,frame_number)—call指定帧上的action 
TCallLabel(movie_clip,label)—————-call指定标签上的action 
TGetProperty(movie_clip,property)——–获取movie_clip的指定属性 
TSetProperty(movie_clip,property,number)———-设置movie_clip的指定属性


      在这里我们只需要使用的是粗体标识的SetVariable方法,JS通过调用此方法能够直接更改SWF中的变量值。首先我们需要定义插入的SWF的 ID,例如id为VskyDemo,那么我们可以通过下面的JS语句来完成SWF内部变量的设置: window.document.VskyDemo.SetVariable("uid", 12);

      很简单吧,就是这样的。除非是涉及到了HTML中SWF之外元素跟它交互,否则我一般不使用JS来控制SWF里的变量,因为我总觉得怪怪的,呵呵,个人习 惯吧。多多实践,不要觉得这些小东西不起眼,小东西多了,聚结到一起了就是一个大的应用。条条大路通北京,选择你自己喜欢的,自己认为便捷的方式就可以 了,目前我是没有发现这三个方式存在功能上的缺陷

 

【转自】http://www.002pc.com/master/College/Page/HTML/16365_2.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值