如何用url传递变量给swf

如何用url传递变量给swf 概要:3.0改变了些方式,要取得web传递的参数需要使用loaderInfo.parameters[]方法。 如:web传递参数为: a.swf?n=benblog swf 可先声明一个变量 var id:String; id = loaderInfo.parameters["n"]; //parameters["n"] 中 n为web的参数名。 HTML与Flash传值的HTML方法 SWF地址...】

ActionScript3.0 页面给swf文件传值接受

以往as2.0通过web传递参数给swf
只需swf声明一个变量,如: var par:String;
WEB传递参数方式可以按如下方式: a.swf?par=aabbccc
这样子swf就能取得到web传递的参数值。

as3.0改变了些方式,要取得web传递的参数需要使用loaderInfo.parameters[]方法。

如:web传递参数为: a.swf?n=benblog
swf 可先声明一个变量
var id:String;
id = loaderInfo.parameters["n"]; //parameters["n"] 中 n为web的参数名。


HTML与Flash传值的HTML方法

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

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

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

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

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

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase=" fpdownload.macromedia/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=" macromedia/go/getflashplayer" />
</object>

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

   二、FlashVars传递

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

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase=" fpdownload.macromedia/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=" macromedia/go/getflashplayer" />
</object>

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

【如何用url传递变量给swf (2)概要:———————停止动画 IsPlaying()———————————– 动画是否正在播放 GotoFrame(frame_number)—————- 跳转到某帧 TotalFrames()——————————- 获取动画总帧数 CurrentFrame()——————————回传当前动画所在帧数-1 Rewind()——————...】


   三、JS控制

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

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里的变量,因为我总觉得怪怪的,呵呵,个人习惯吧。多多实践,不要觉得这些小东西不起眼,小东西多了,聚结到一起了就是一个大的应用。条条大路通北京,选择你自己喜欢的,自己认为便捷的方式就可以了,目前我是没有发现这三个方式存在功能上的缺陷。

提问人的追问  2009-11-28 09:21
我还是没有看明白是怎么来做 可以说的详细点吗?

回答人的补充  2009-11-28 09:32
以往as2.0通过web传递参数给swf
只需swf声明一个变量,如: var par:String;
WEB传递参数方式可以按如下方式: a.swf?par=aabbccc
这样子swf就能取得到web传递的参数值。

as3.0改变了些方式,要取得web传递的参数需要使用loaderInfo.parameters[]方法。
如:web传递参数为: a.swf?a=123&b=456


下面是swf 可先声明一个变量
var id:String;
id = loaderInfo.parameters["a"]; //parameters["n"] 中 n为web的参数名。

var id:name;

name = loaderInfo.parameters["b"];

提问人的追问  2009-11-28 10:01
我感觉AS3感觉不如AS2好

那也就是说如果用AS2的话 只能用 a.swf?a=123&b=456

用JS方法先截取到url问题后面的内容

之后用 document.writeln 加上变量的方法来实现吗?

这个我知道 我是想说没有别的方法可以直接些的吗

【如何用url传递变量给swf (3)概要:ternet Explorer 具有 2,083 个字符的最大的统一资源定位符 (URL) 长度。 Internet Explorer 也有 2,048 个字符的最大路径长度。 此限制适用于 POST 请求和 GET 请求 url。 如果使用的 GET 方法您限于减去实际路径中的字符数的 2,048 字符的最大值。 但是,POST 方法不...】


还有个问题 AS2只可以加一个变量 还是也可以多个


回答人的补充  2009-11-28 10:26
document.writeln 加上变量的方法来可以实现


可以直接些的是 直接调用a变量 不要定义什么 a自动定义的你可以直接调用!


Microsoft Internet Explorer 具有 2,083 个字符的最大的统一资源定位符 (URL) 长度。 Internet Explorer 也有 2,048 个字符的最大路径长度。 此限制适用于 POST 请求和 GET 请求 url。

如果使用的 GET 方法您限于减去实际路径中的字符数的 2,048 字符的最大值。

但是,POST 方法不是受用于提交的名称/值对 URL 的大小。 这些对标头中并不在 URL 中传输。

RFC 2616、"超文本传输协议--HTTP/1.1,"则不需要指定 URL 长度的任何要

posted @ 2011-08-03 19:32  kevin655  阅读(1527)  评论(0编辑  收藏  举报