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
的變數。
1
this
.createEmptyMovieClip(
"
target_mc
"
,
this
.getNextHighestDepth());
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"