从 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 IDE 测试电影无法从 localhost 加载文件