Web页面想Flash传递参数大致分为下面三类
1.通过swf文件的URL传递:即在swf文件的URL后加入形如?a=A&b=B的字符串。
2.通过swf的Activex控件参数传递:即在Object的属性中<param name="FlashVars" value="a=A&b=B"。
这 两种作法的结果都是在swf文件的顶层对象中生成包含两个参数的参数列表:a=A和b=B。在使用ActionScript2.0以前的版本的Flash 中,可以直接通过引用顶层文件对象的root.a,root.b或_level0.a,_level0.b属性就可以访问到了。
在ActionScripti3.0 后,由于加强了面向对象的概念,因此默认的参数被包装在了顶层对象(DisplayObject类型)所包含的LoaderInfo对象的 parameters属性中。通过访问root.loaderInfo.parameters属性可以对传入的参数进行遍历。
例如在文档类中定义var param:Object = root.loaderInfo.parameters;
如果取u1的值,可以用param["u1"],同样u2的值:param["u2"]
做了个小例子,document class如下:
1 package {
2 import flash.display.Sprite;
3 import flash.display.Stage;
4 import flash.display.StageScaleMode;
5 import flash.text.TextField;
6 import flash.text.TextFieldAutoSize;
7
8 public class LoaderInfoDemo extends Sprite {
9 public function LoaderInfoDemo() {
10 stage.scaleMode = StageScaleMode.NO_SCALE;
11 var out_txt:TextField = createText();
12 out_txt.border = true;
13 out_txt.borderColor = 0xFF6600;
14 out_txt.y = 20;
15 addChild(out_txt);
16 var info_txt:TextField = createText();
17 info_txt.text = "修改loaderInfoDemo.swf?msg=xxx中的xxx值,然后回车";
18 info_txt.autoSize = TextFieldAutoSize.LEFT;
19 addChild(info_txt);
20 var param:Object = root.loaderInfo.parameters;
21 if (param["msg"] != null) {
22 out_txt.text = param["msg"];
23 trace("value:" + param["msg"]);
24 }else {
25 out_txt.text = "null";
26 trace("value:null");
27 }
28 }
29 private function createText():TextField {
30 var tmp:TextField = new TextField();
31 tmp.selectable = false;
32 tmp.width = 100;
33 tmp.height = 20;
34 return tmp;
35 }
36 }
37 }
3.第三类方法是在影片内部,调用
方法,从指定位置主动读取配置参数,并将参数数值传递到指定的对象内部。 loadVariables
下面的示例将名为 params.txt 的文本文件中的信息加载到使用 createEmptyMovieClip()
创建的影片剪辑 target_mc
中。setInterval()
函数用于检查加载进度。该脚本检查 params.txt 文件中是否存在名为 done
的变量。
2 loadVariables("params.txt", target_mc);
3 function checkParamsLoaded() {
4 if (target_mc.done == undefined)
5 {
6 trace("not yet.");
7 } else {
8 trace("finished loading. killing interval.");
9 trace("-------------");
10 for (i in target_mc) {
11 trace(i + ": " + target_mc[i]);
12 }
13 trace("-------------");
14 clearInterval(param_interval);
15 }
16 }
17 var param_interval:Number = setInterval(checkParamsLoaded, 100);
外部文件 params.txt
包括以下文本:
var1="hello"&var2="goodbye"&done="done"