我正在研究的网站(使用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()
之前,如何等待所有内容完全加载?
答案 0 :(得分:1)
也许您应该仔细检查crossdomain.xml
中是否有适当的授权。如果您的跨域文件被置位,则您的所有请求都不会通过。
答案 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)