flash 中的相对路径

  Flex 中对图片加载并显示的两个类主要是 Image 和 SwfLoader,Image继承 SwfLoader,还实现了一些IDataRenderer、

IDropInListItemRenderer、IListItemRenderer的接口。flex swfLoader 还是使用Loader类等对内容的加载。

  Loader类,无论在Flash Authoring Tool 还是在 Flex 中对相对路径的解析,会依托给承载swf的容器。这样理解,如果,swf通过 或标签嵌套在网页,那么所有的相对路径都被解析为,相对那个网页,而不是任何swf文件,

如果Flash Player 作为一个独立的应用程序,或通过网页直接访问.swf ,那么所有的相对URL都被解析为相对于由Flash Player

打开的第一个 .swf 文件-称为Stage Owner。即使Flash Player 打开的第一个.swf 从舞台上一处,它任然作为舞台拥有者,并且任然控制相对路径的解析。(此段摘自 Essential.ActionScript.3.0.pdf  28. Loading External Display Assets)

  但是 Flex中的SwfLoader会根据当前的swf的路径对相对路径解析为绝对路径。mx.controls.SwfLoader [Code 1324 - Code 1340 Ver 3.0],这些都没有问题,但是有一种情况就是,用Flash Player 启动一个可以读本地文件的swf时,Flash Player 对 “file:///D:/work/inkerweb/public/test/../b18e66b41efd9a3df1a7bc8758da1883.jpg”,格式的路径 会报一个IOERROR 错误,“file:///D:/work/inkerweb/public/test/../b18e66b41efd9a3df1a7bc8758da1883.jpg”,这个路径没有错,网页对它的解析也是正确的,只是Flash Plaer 对不而已。所以,flex中 swfLoader 或 Image 要支持 souce=“../XXX.XXX” 格式的路径的本地访问,可能还要在 mx.controls.SwfLoader [Code 1324 - Code 1340 Ver 3.0],对代码做一下这样的处理:

 

 

if (!(url.indexOf(":") > -1 || url.indexOf("/") == 0 || url.indexOf("\\") == 0))
            {
                var rootURL:String;
                if (SystemManagerGlobals.bootstrapLoaderInfoURL != null && SystemManagerGlobals.bootstrapLoaderInfoURL != "")
                    rootURL = SystemManagerGlobals.bootstrapLoaderInfoURL;
                else if (root)
                    rootURL = LoaderUtil.normalizeURL(root.loaderInfo);
                else if (systemManager)
                    rootURL = LoaderUtil.normalizeURL(DisplayObject(systemManager).loaderInfo);

                if (rootURL)
                {
                    Code AT: if(rootURL.indexOf("file:") != 0) {
                       var lastIndex:int = Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
                        if (lastIndex != -1)
                            url = rootURL.substr(0, lastIndex + 1) + url;           
                    } 

                }
            }

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值