为什么URLReqeusts在我将它们移动到Web服务器时不加载我的文件?

Cle*_*ter 0 flash actionscript-3

我一直在寻找一个更好的方法来处理这个问题,也许它只是我正在使用的措辞,但我找不到我想要的答案.我会解释我在做什么,希望有人能够解释如何做到这一点.

在我的机器上开发flash项目时,我可以使用以下内容:

        var request:URLRequest = new URLRequest("images.xml"); 
        var loader:URLLoader = new URLLoader();
        loader.addEventListener(Event.COMPLETE, handleResult);
        loader.addEventListener(IOErrorEvent.IO_ERROR, handleIOError);
        loader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, handleSecurityError);

        loader.load(request);
Run Code Online (Sandbox Code Playgroud)

只要images.xml文件与.fla位于同一目录中,它就可以正常工作.然而,一旦我将.swf,.xml和我的图像移动到网络上,它就会消失..swf无法再找到.xml文件,我知道原因.使用FlashBug我可以在控制台中读取错误.

IOError: [IOErrorEvent type="ioError" bubbles=false cancelable=false eventPhase=2 text="Error #2032: Stream Error. URL: http://www.mydomain.com/images.xml"]
Run Code Online (Sandbox Code Playgroud)

当我将.swf移动到我的Web服务器时,URLRequest将我的域添加到请求中就会出现问题.由于该文件只是位于我的机器上的同一目录中,因此只是说"images.xml"不会引起问题,但现在为了使其工作,我必须将其更改为"http://www.mydomain .COM /闪光灯/ myproject的/ images.xml".

我想知道是否有办法强制.swf继续查看它所需的文件所在的目录.我认为必须拼写它是违反直觉的,因为我不能只是移动文件而不必重新编写我的AS3代码.

我知道这可以做到我已经看到项目做了,我只是希望我知道他们是如何做到的.

Lar*_*sjö 5

我想知道是否有办法强制.swf继续查看它所需的文件所在的目录.

是的,你可以使用baseobject和embed标签的属性.

默认情况下,ActionScript中的相对路径相对于包含Flash的页面而不是相对于swf文件base进行解析,但该属性允许您指定另一个目录路径,该路径用于解析相对路径.

因此,对于上面的示例路径,它将是这样的:

<param name="base" value="/flash/myproject/">

<embed base="/flash/myproject/" src="...
Run Code Online (Sandbox Code Playgroud)

或者,如果使用SwfObject嵌入swf,则可以通过attributes参数指定base:

http://code.google.com/p/swfobject/wiki/documentation

编辑:

对此进行了跟进,虽然答案已被接受,但由于您评论的是您最初希望在ActionScript而不是HTML中处理它,以及可能的未来读者:

如果由于某种原因不希望或不能base在HTML中设置属性,则ActionScript中的替代方法是使用loaderInfo.url获取swf的URL,选择其中的目录部分并将其用作路径加载swf旁边的文件.这是从我的项目复制的代码,包括评论:

// URL to the directory (folder) the main swf file is loaded from.
// Can be used to load other files realtive to the swf (instead of realtive to the page, which is default).
// So swfDir will normaly be like "http://www.site.com/upload/somefolder/"
var swfDir:String = loaderInfo.url.substring(0, loaderInfo.url.lastIndexOf("/")+1);
Run Code Online (Sandbox Code Playgroud)

稍后,当你想加载例如XML文件时,你会这样做:

var request:URLRequest = new URLRequest(swfDir + "images.xml");
Run Code Online (Sandbox Code Playgroud)