从Flash中的swf文件外部加载xml文件

时间:2008-10-28 18:16:21

标签: xml flash actionscript-2

我正在研究的网站(使用AS2,因为它是oldschool)有一个更大的索引.swf文件,使用loadMovie("foo1.swf", placeToShowSwf)加载子swfs。有foo1.swf到4,这是愚蠢的,因为它们之间唯一不同的是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)之后立即调用loadMove()时,trace(fooNum)函数内的setFooNum()会打印出fooNum设置正确,但内部有trace(fooNum) onLoad()(虽然显然没有加载,但返回成功,顺便说一下)显示fooNum未定义!此外,我在索引swf中创建了一个调用setFooNum(3)的按钮(用于调试目的),由于某种原因使其工作正常。所以等待几秒钟来加载文件似乎可以解决问题,但这是一个非常难看的解决方案。

那么在调用setFooNum()之前,如何等待所有内容完全加载?

4 个答案:

答案 0 :(得分:1)

也许您应该仔细检查crossdomain.xml中是否有适当的授权。如果您的跨域文件被置位,则您的所有请求都不会通过。

http://crossdomainxml.org/

答案 1 :(得分:0)

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

var iFooNum:Number;
var oXML:XML = new XML();

oXML.onLoad = function (success:Boolean) {
  if(success) {
    //Do Something with XML.
  }
}

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

如果从其他域加载XML文件,则需要在另一个域上使用crossdomain.xml文件,以允许Flash加载XML文件。

答案 2 :(得分:0)

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

function setFooNum(i:Number) {
    fooNum = i;
    my_xml.load("foo"+fooNum+".xml");
};

答案 3 :(得分:0)

kirupa网站上的这个教程可以帮到你。

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

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