Преобразовать относительный URL-адрес в абсолютный URL-адрес в Actionscript / Flex - PullRequest
1 голос
/ 05 января 2010

Я работаю с Flex, и мне нужно взять относительное свойство источника URL-адреса и преобразовать его в абсолютный URL-адрес перед загрузкой.

Конкретный случай, с которым я работаю, включает в себя настройку метода загрузки SoundEffect. Мне нужно определить, будет ли файл загружен из локальной файловой системы или по сети, просматривая свойство источника, и я нашел самый простой способ сделать это - создать абсолютный URL.

У меня проблемы с генерацией абсолютного URL для звукового эффекта, в частности. Вот мои первые мысли, которые не сработали.

  1. Найдите объект DisplayObject, для которого предназначен звуковой эффект, и используйте его свойство loaderInfo. При загрузке SoundEffect цель равна нулю, поэтому это не работает.

  2. Посмотрите на FlexGlobals.topLevelApplication, на свойства url или loaderInfo. Однако ни один из них не установлен.

  3. Посмотрите на FlexGlobals.topLevelApplication.systemManager.loaderInfo. Это также не было установлено.

Код SoundEffect.as в основном сводится к

var url:String = "mySound.mp3";
/*>> I'd like to convert the URL to absolute form here and tweak it as necessary <<*/
var req:URLRequest = new URLRequest(url);
var loader:Loader = new Loader();
loader.load(req);

Кто-нибудь знает, как это сделать? Любая помощь, разъясняющая правила разрешения относительных URL для URLRequest в ActionScript, также будет высоко оценена.

edit Я также был бы совершенно удовлетворен каким-либо способом определить, будет ли URL загружен из локальной файловой системы или по сети. Посмотрев на абсолютный URL, было бы просто взглянуть на префикс, например file:// или http://.

1 Ответ

0 голосов
/ 05 января 2010

Полагаю, вам просто нужно поместить свойство currentDirectory события invoke вашего приложения перед относительной частью вашего URL, чтобы получить абсолютный URL. Обратите внимание, что в нем все еще могут быть такие вещи, как ./ и ../.

Вот некоторый код с релевантной страницы Adobe liveocs :

var arguments:Array;
var currentDir:File;
public function onInvokeEvent(invocation:InvokeEvent):void {
    arguments = invocation.arguments;
    currentDir = invocation.currentDirectory;
}
...