したがって、モジュールローダーではなく、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 に関連するすべてのものを用意する必要があります...何か提案はありますか?