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如下:
package {
import flash.display.Sprite;
import flash.display.Stage;
import flash.display.StageScaleMode;
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class LoaderInfoDemo extends Sprite {
public function LoaderInfoDemo(){
stage.scaleMode = StageScaleMode.NO_SCALE;
var out_txt:TextField = createText();
out_txt.border = true;
out_txt.borderColor = 0xFF6600;
out_txt.y = 20;
addChild(out_txt);
var info_txt:TextField = createText();
info_txt.text = "修改loaderInfoDemo.swf?msg=xxx中的xxx值,然後回車";
info_txt.autoSize = TextFieldAutoSize.LEFT;
addChild(info_txt);
var param:Object = root.loaderInfo.parameters;
if(param["msg"]!=null){
out_txt.text = param["msg"];
trace("value:"+param["msg"]);
}else{
out_txt.text = "null";
trace("value:null");
}
}
private function createText():TextField{
var tmp:TextField = new TextField();
tmp.selectable = false;
tmp.width = 100;
tmp.height = 20;
return tmp;
}
}
}
3.第三類方法是在影片內部,調用
方法,從指定位置主動讀取配置參數,並將參數數值傳遞到指定的對象內部。 loadVariables
下面的示例將名爲 params.txt 的文本文件中的信息加載到使用 createEmptyMovieClip()
創建的影片剪輯 target_mc
中。setInterval()
函數用於檢查加載進度。該腳本檢查 params.txt 文件中是否存在名爲 done
的變量。
外部文件 params.txt
包括以下文本: