Flashvars未定义

时间:2011-10-24 16:08:01

标签: flash undefined flashvars

我正在尝试使用flash vars将参数传递给我的swf文件。我正在使用Swfobject来嵌入我的瑞士法郎。但是,我无法在swf文件中访问这些flashvars。我好几周都遇到了麻烦。我搜索了互联网,swfobject的文档以及与此相关的其他问题。

这是我使用swfobject嵌入swf文件的js代码。

<script type="text/javascript" src="swfobject.js"></script>
<script type="text/javascript">
var flashvars = {};
flashvars.name1 = "hello";
swfobject.embedSWF("Comics.swf", "myContent", "950", "650","9.0.0","expressInstall.swf", flashvars, flashvars,flashvars);
</script>

这是我用于嵌入的html代码

<div id="myContent"></div>

swf嵌入正常并产生以下

<object type="application/x-shockwave-flash" name1="hello" data="Comics.swf" width="950" height="650" id="myContent" style="visibility: visible; ">
    <param name="name1" value="hello">
    <param name="flashvars" value="name1=hello">
</object>

再次,swf嵌入很好。我可以看到内容,但flashvars似乎是null。 这是我的flash代码,试图访问flashvars

var flashVars = root.loaderInfo.parameters;
addChild(Util.newLabel("  FlashVars: " + flashVars+" "+root.loaderInfo,0,0,400,100,12,0x0));        


var y=0;
for(var i in flashVars){
    addChild(Util.newLabel("FlashVars:"+i+":"+flashVars[i],0,y+=30,300,100,12,0x0));
}

Util是我自定义的类,其中newLabel(str:String,x:Number,y:Number,w:Number,h:Number,fontSize:uint,color:uint)是一个返回标签组件的方法str作为它的文本,x和y作为它的位置,w和h作为它的尺寸等。我很确定util的工作原理所以我想知道我如何真正加载flashvars?

运行此代码时,我应该看到一个变量名列表。

PS:上面的flash代码在主时间轴中编码(我使用flash ide来编译我的代码),在第一帧中,而Util是一个单独的文件。主时间轴中第一帧中的根对象是[对象MainTimeline]。

如果您需要更多信息,请与我们联系。提前致谢。

2 个答案:

答案 0 :(得分:2)

Flash通过获取URL中的变量或flashvars来捕获变量,它们是键/值对。所以基本上如果你有这样的URL:

http://someurl.com/flashmovie.swf?testVariable=101&testVariable2=tank

testVariable是键,101是值,你可以得到这些键/值对,如下所示;

    //creating a textfield for debugging
var _textField:TextField = new TextField();
_textField.autoSize = TextFieldAutoSize.LEFT;
_textField.border = true;
addChild(_textField);

//flashvars code
try {
    var valueString:String;
    var keyString:String;
    var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
    for (keyString in paramObj) {
        valueString = String(paramObj[keyString]);
        _textField.appendText("\t" + keyString + ":\t" + valueString + "\n");
    }
}catch (error:Error) {
    _textField.appendText(error.toString());
}

希望这有帮助,干杯

答案 1 :(得分:1)

我只是设置了一个嵌入SWF的HTML页面(实际上,我复制/粘贴了你的代码),然后在我的Flash中我放了以下(简单)代码:

import flash.text.TextField;

var myTextField:TextField = new TextField();    

var flashVars = root.loaderInfo.parameters;

myTextField.text = flashVars["name1"]+"!";

addChild(myTextField);

当我打开HTML页面时,我得到了一个很好的“你好!”在预期的屏幕上。显然我无法尝试你的标签创建者组件,但该行将是:

addChild(Util.newLabel(flashVars["name1"]+"!",0,0,400,100,12,0x0) );        

如果这不起作用,我会说你在 Util.newLabel()中有一些错误,我的建议是尝试我的简单版本,看看你是否可以访问flashvars这样(你不应该有任何麻烦),然后检查其他东西发生了什么。

希望这有帮助!