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

Posted

技术标签:

【中文标题】从 Flash 中的 swf 文件外部加载 xml 文件【英文标题】:Loading an xml file from outside the swf file in Flash 【发布时间】:2010-09-19 15:30:15 【问题描述】:

我正在开发的一个网站(使用 AS2,因为它是老式的)有一个更大的索引 .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() 行是罪魁祸首。不幸的是,我现在遇到了一个新的令人兴奋的错误。当在索引文件中的 loadMove() 之后立即调用 setFooNum(i) 时,setFooNum() 函数内的 trace(fooNum) 打印出 fooNum 设置正确,但 onLoad() 内的 trace(fooNum)显然没有加载,顺便说一句)表明 fooNum 是未定义的!此外,我在索引 swf 中创建了一个按钮,调用 setFooNum(3)(用于调试目的),出于某种原因,它可以正常工作。所以等待几秒钟文件加载似乎可以解决问题,但这是一个非常丑陋的解决方案。

那么在调用setFooNum() 之前,我该如何等到所有内容都加载完毕?

【问题讨论】:

提供您在编辑中提到的所有来源,没有它很难提供帮助。 你能发布你的 onLoad 是什么样的吗? fooNum 不是全局变量,因此在您的 onLoad fooNum 内部将无法识别。这是一个变量范围问题。 【参考方案1】:

您的函数每次都创建一个新的 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 文件。

【讨论】:

onLoad 在别处定义。 my_xml.load 在函数中未调用时有效,但我需要更改加载的 xml 文件,然后加载它。 但您正在函数中创建一个新实例,因此未定义 onLoad。 你是对的。我真傻。但现在我得到了一个不同的错误。如果我在 loadMovie() 之后立即调用 setFooNum(i),则 swf 会得到其中一个“脚本导致您的计算机运行缓慢。取消?”错误,我认为这意味着无限循环或崩溃。无论如何,更新了我的问题。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

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

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

【讨论】:

【参考方案4】:

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

http://crossdomainxml.org/

【讨论】:

以上是关于从 Flash 中的 swf 文件外部加载 xml 文件的主要内容,如果未能解决你的问题,请参考以下文章

转到外部 Flash 动作脚本 3 中的下一帧

从动态文本 AS2 Flash 链接到 swf

使用 Flash IDE 测试电影无法从 localhost 加载文件

从网站的不同页面访问时未从缓存加载 SWF 文件?

在运行时将 xml 配置文件动态加载到 Flex4/Flash 电影中的最佳方法?

Flash AS3 加载文件 xml