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;
               }
          }
}

どうやら、アドビは画像をトップレベルのswfではなく実際のswfにロードするように特別な努力を払っているようです(そうでなければ選択するフラグはありません...)。 「swf に相対的な読み込み」フラグ、SWFLoader を直接編集するか、トップ レベルではなく、個々の swf に関連するすべてのものを用意する必要があります...何か提案はありますか?

4

2 に答える 2

2

Application.application.urlをインポートmx.core.Applicationして使用し、モジュール内のホストアプリケーションのパスを取得し、それを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 に答える