·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

embed标签和url向Flash传flashvars值的问题

时间:2011-08-25 18:06绿色花园
embed标签和url向Flash传flashvars值的问题,今天的工作遇到了flash读取embed中的flashvars值,特意研究了一下

  今天的工作遇到了flash读取embed中的flashvars值,特意研究了一下。

  先看html代码:

  1. <object> 
  2. <embed src="test.swf" wmode="transparent" quality="high" width="550" height="400" 

    align="L" scale="noborder" flashvars="width=300&height=500&color=blue" 

    allowScriptAccess="sameDomain" type="application/x-shockwave-flash"></embed> 
  3. </object> 

  AS3代码test.swf:

  1. var tf:TextField=new TextField();  
  2. var str1:String =stage.loaderInfo.parameters.width;   
  3. var str2:String =stage.loaderInfo.parameters.height;   
  4. var str3:String =stage.loaderInfo.parameters.color;   
  5. tf.text="width="+str1+"height="+str2+"color="+str3;  
  6.  
  7. tf.width=300;  
  8. addChild(tf); 

  embed中的swf可以读取flashvars中的值对,此时舞台上显示出了响应的结果。这种方法可以用到简单的数据交换,方便省事,避免读取xml或借用js得到外部数据。

  如果有多个值对也可以用for in遍历:

  AS3代码:

  1. var tf:TextField=new TextField();  
  2. var paramObj:Object=stage.loaderInfo.parameters;  
  3. for(var key:String in paramObj){  
  4. tf.appendText(key+"="+paramObj[key]);  
  5. }  
  6. tf.width=300;  
  7. addChild(tf); 

  读取到的flashvars其实是一个Object类型,可以用for in遍历。但这种方法要注意测试的时候html文件路径避免是中文,因为这样可能会导致flash读取到的数据是乱码。

  讨论另一种情况。

  如果这个swf没有插入到html中,而是直接用http://www.abc.com/test.swf这种方式打开的话那flash的stage.loaderInfo.parameters不就得不到数据了吗?

  其实也不是,不妨换一种方法。如果你在后面加上相应的参数如:http://www.abc.com/test.swf?width=300&height=500&color=blue,enter打开一下该网页,你会发现舞台上又显示出了url传来的值,url传值到了stage.loaderInfo.parameters对象中。这种方法在本地测试不了,必须放在服务器上如localhost。( 作者:绿色花园 )

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器