3

所以,我有一个使用 ModuleManager 加载模块的 Flex 项目,而不是模块加载器。我遇到的问题是要加载外部资产(如视频或图像),加载该资产的路径必须相对于模块 swf...而不是相对于加载模块的 swf。

问题是 - 如何使用相对于父 swf 而不是模块 swf 的路径将资产加载到加载的模块中?


精氨酸!因此,在挖掘 SWFLoader 类时,我在私有函数 loadContent 中发现了这段代码:

    // make relative paths relative to the SWF loading it, not the top-level SWF
    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)
              {
                   var lastIndex:int = Math.max(rootURL.lastIndexOf("\\"), rootURL.lastIndexOf("/"));
                    if (lastIndex != -1)
                         url = rootURL.substr(0, lastIndex + 1) + url;
               }
          }
}

显然,Adobe 已经付出了额外的努力来使图像加载到实际的 swf 而不是顶级 swf 中(没有其他标志可供选择......),所以我想我应该提交一个功能请求以获得某种“相对于 swf 加载”标志,直接编辑 SWFLoader,或者我应该拥有与单个 swf 相关的所有内容,而不是顶级...有什么建议吗?

4

2 回答 2

2

您可以导入mx.core.Application然后使用Application.application.url来获取模块中主机应用程序的路径,并将其用作构建 URL 的基础。

有关处理 URL 的帮助,请参阅标准 Flex 库中的 URLUtil 类as3corelib 项目中的 URI 类

于 2008-09-25T11:14:42.997 回答
1

您可以在模块中使用 this.url 并将其用作 baseURL。

var urlParts:Array = this.url.split("/");
urlParts.pop();
baseURL = urlParts.join("/");
Alert.show(baseURL);

并使用{baseURL + "/location/file.ext"}而不是/location/file.ext

于 2010-02-12T15:04:28.577 回答