2010-01-05 4 views
1

Je travaille avec Flex et j'ai besoin de prendre une propriété de source d'URL relative et de la convertir en URL absolue avant de la charger.Conversion d'une URL relative en une URL absolue dans Actionscript/Flex

Le cas spécifique dans lequel je travaille consiste à ajuster la méthode de chargement de SoundEffect. J'ai besoin de déterminer si un fichier sera chargé à partir du système de fichiers local ou sur le réseau à partir de la propriété source, et la façon la plus simple de le faire est de générer l'URL absolue.

J'ai des difficultés à générer l'URL absolue pour l'effet sonore en particulier. Voici mes premières pensées, qui n'ont pas fonctionné.

  1. Recherchez le DisplayObject ciblé par l'effet sonore et utilisez sa propriété loaderInfo. La cible est nulle lorsque SoundEffect est chargé, cela ne fonctionne donc pas.

  2. Regardez FlexGlobals.topLevelApplication, aux propriétés url ou loaderInfo. Cependant, aucun de ceux-ci n'est défini.

  3. Regardez FlexGlobals.topLevelApplication.systemManager.loaderInfo. Ce n'était pas non plus défini.

Le code SoundEffect.as se résume essentiellement à

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

Est-ce que quelqu'un sait comment faire cela? Toute aide clarifiant les règles de résolution des URL relatives aux URLRequests dans ActionScript serait également très appréciée.

edit Je serais également parfaitement satisfait de savoir si l'URL sera chargée à partir du système de fichiers local ou sur le réseau. En regardant une URL absolue, il serait facile de regarder le préfixe, comme file:// ou http://.

Répondre

0

Je crois que vous avez juste besoin de mettre la propriété currentDirectory de l'événement invoke de votre application devant la partie relative de votre URL pour obtenir l'URL absolue. Notez que cela pourrait encore contenir des choses comme ./ et ../ à l'intérieur.

est ici un code de la relavant Adobe livedocs page:

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

Hey whybird, merci pour prêter main-forte. Je vais devoir le vérifier demain, mais il semble que l'onInvokeEvent ne soit lancé que pour le lancement de l'application AIR. Cela devra également fonctionner pour les applications Web. Si possible, j'aimerais également éviter d'ajouter un écouteur si l'information est disponible autrement. Je vais bricoler un peu et voir ce qui apparaît. – Bear

+0

Oui, je comprends à propos de l'écouteur, bien que dans ce cas vous pouvez le tuer après qu'il se soit produit une fois. Je pense que onInvokeEvent fonctionne aussi sur le lancement d'une application web. Vérifiez le dernier point sous le titre "Application Invocation" dans le livedoc lié ci-dessus. – whybird

Questions connexes