2010-01-05 3 views
1

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

Конкретный случай, с которым я работаю, включает в себя настройку метода загрузки 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-адреса разрешены для URLRequests в ActionScript, также будет высоко оценена.

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

ответ

0

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

Вот некоторый код из relavant Adobe livedocs page:

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

Эй whybird, спасибо за развязав руки. Мне нужно будет проверить это завтра, но похоже, что onInvokeEvent запускается только для запуска приложения AIR. Это также должно работать и для веб-приложений. Если возможно, я также хотел бы избежать добавления слушателя, если информация в противном случае доступна. Я немного потрудился и посмотрю, что всплывает. – Bear

+0

Да, я понимаю о слушателе, хотя в этом случае вы можете убить его после того, как это произойдет однажды. Я считаю, что onInvokeEvent также работает с запуском веб-приложений. Проверьте последнюю маркерную точку в заголовке «Применение приложения» в ссылке, связанной выше. – whybird

Смежные вопросы