4

我正在开发的一个网站(使用 AS2,因为它是老式的)有一个更大的索引 .swf 文件,它使用 .swf 加载子 swfs loadMovie("foo1.swf", placeToShowSwf)。一直到 4,这foo1.swf很愚蠢,因为它们之间唯一不同的是 xml 文件地址中的一个数字,它告诉它要加载什么内容。因此,我想将其简化为一个文件,并使用索引文件调用以加载 xml 文件的简单函数,如此处所示。

function setFooNum(i:Number) {
   fooNum = i;
   //my_xml = new XML();  edit: this line has since been removed and is kept for historical purposes
   my_xml.load("foo"+fooNum+".xml");
};

但是,由于某种原因,xml 文件不会加载。它在函数之外正确加载,但这对我没有多大好处。它会正确更改 fooNum,但是如果已经加载了错误的 xml 文件,那对我没有任何好处。据我所知,代码表现得好像my_xml.load("foo"+fooNum+".xml")根本不存在。

这是某种我不知道的安全措施吗,有什么办法吗?

编辑 正如几个人指出的那样,这my_xml = new XML()条线是罪魁祸首。不幸的是,我现在遇到了一个令人兴奋的新错误。当在索引文件中的setFooNum(i)之后立即调用内部的打印出 fooNum 设置正确,但内部的a (尽管显然没有加载,但返回成功,顺便说一句)表明 fooNum 未定义!此外,我在索引 swf 中创建了一个按钮,用于调用(用于调试目的),出于某种原因,它可以正常工作。所以等待几秒钟文件加载似乎可以解决问题,但这是一个非常丑陋的解决方案。loadMove()trace(fooNum)setFooNum()trace(fooNum)onLoad()setFooNum(3)

那么我该如何等到所有内容都完全加载后再调用setFooNum()呢?

4

4 回答 4

1

也许您应该仔细检查您是否在crossdomain.xml. 如果您的跨域文件被劫持,您的任何请求都不会通过。

http://crossdomainxml.org/

于 2009-11-23T19:29:19.577 回答
0

您的函数每次都创建一个新的 XML 实例,因此您每次都需要定义 onLoad 函数,如果您重用相同的 XML 实例,则无需重新定义该函数,例如

var iFooNum:数字;
var oXML:XML = new XML();

oXML.onLoad = function (success:Boolean) {
  如果(成功){
    //用 XML 做一些事情。
  }
}

loadFooNum = function(i:Number) {
  iFooNum = 我;
  oXML.load("foo" + i + ".xml");
}

如果您从不同的域加载 XML 文件,则需要另一个域上的 crossdomain.xml 文件以允许 flash 加载 XML 文件。

于 2008-10-28T18:24:46.710 回答
0

假设您在函数外部为 XMLinstance 定义了 onLoad 事件处理程序,您可以从函数体中删除实例的声明:

function setFooNum(i:Number) {
    fooNum = i;
    my_xml.load("foo"+fooNum+".xml");
};
于 2008-10-28T18:56:01.873 回答
0

kirupa 网站上的本教程可以帮助您。

http://www.kirupa.com/web/xml/index.htm

它解释了如何使用 AS 和 XML。希望这可以帮助您得到答案。

于 2009-09-20T14:16:11.617 回答