从子加载的swf访问HTML中定义的flashvar?答案如下

时间:2010-11-11 15:15:47

标签: actionscript-3 flash-cs4 flash-cs3 flashvars

我的html文件中存有一个flash var:

<script type="text/javascript">

    var flashvars = {

        map:"mapGAcentury21.xml"

    };

    var params = {

        menu: "false",

        scale: "noScale",

        allowFullscreen: "true",

        allowScriptAccess: "always",

        bgcolor: "#FFFFFF"

    };

    var attributes = {

        id:"REMap"

    };

    swfobject.embedSWF("REMap.swf", "altContent", "840", "630", "9.0.0", "expressInstall.swf", flashvars, params, attributes);

</script>

我有一个我在FlashDevelop中开发的flash应用程序。在这个Flash应用程序中,我加载了一个名为728x90.swf的文件。我可以自由编辑我的728x90.fla文件,但我不想更改我的主要Flash应用程序文件。

如何从728x90.swf文件中访问flashvars变量?

编辑:

The following codes traced "your variable is undefined" 
1. trace("your variable is " + stage.loaderInfo.parameters.flashvars); 
2. trace("your variable is " + loaderInfo.parameters.flashvars); 
3. trace("your variable is " + loaderInfo.parameters.flashvars.map);
4. trace("your variable is " + stage.loaderInfo.parameters.flashvars.map);

编辑2: 我将我的整个javascript代码粘贴到我的原始帖子中。我的flashvars被传递到我的主swf文件中,名为“REMap.swf”REMap.swf

public var requestAd:URLRequest = new URLRequest("media/728x90.swf");

然后在函数中,以下代码加载我的728x90.swf文件

loaderAd.load(requestAd);
addChild(loaderAd);
loaderAd.contentLoaderInfo.addEventListener(Event.COMPLETE, promoLoaded);

4 个答案:

答案 0 :(得分:2)

您可以通过调用

来获取父swf的参数
parent.loaderInfo.parameters

答案 1 :(得分:0)

您的文档对象是MovieClip。与MovieClip关联的flashvar存储在其loaderInfo.parameters属性中。除非您想要与原始调用flash影片相关联的flashvars,否则不要从stage.loaderInfo.parameters获取flashvars。

编辑添加:

了解how to pass flashvars to a flash video。我感觉你正试图从flash访问JavaScript对象。这也可以,你只需要阅读flash.external.ExternalInterface

编辑#2:

public var requestAd:URLRequest = new URLRequest("media/728x90.swf");

应该是:

public var requestAd:URLRequest = new URLRequest("media/728x90.swf?map=mapGAcentury12.xml");

查看swfobject.embedSWF调用生成的HTML。它可能没有正确发送flashvars。

答案 2 :(得分:0)

简单回答:

创建一个变量并根据需要为其命名。我尝试了以下三个:

var s1:String = stage.loaderInfo.parameters["map"];
var s2:String = this.root.loaderInfo.parameters["map"];
var s3:String = root.loaderInfo.parameters.map;

trace(s1 + " " + s2 + " " + s3);

输出:mapGAcentury21.xml null null

答案: 要从子swf访问父swf的flashvars,请使用以下代码:

var s1:String = stage.loaderInfo.parameters["PLACE THE NAME OF YOUR FLASHVAR WITHIN QUOTATIONS"];
trace(s1);

答案 3 :(得分:0)

菲尔说得对:

var s1:String = stage.loaderInfo.parameters["map"];
如果已将子SWF添加到舞台中,

将起作用, 才能正常工作。这在加载完成后发生一个/一些帧(s?)。 您可以像这样听孩子的事件:

public function instantiateChildClass(){
   trace(stage.loaderInfo.parameters["map"]); //throws error if this SWF has just been loaded into a parent SWF
   addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event):void{
   removeEventListener(Event.ADDED_TO_STAGE, init);
   trace(stage.loaderInfo.parameters["map"]); //traces map param
}