2009-12-22 24 views

Respuesta

8

Stage tiene una propiedad loaderInfo, que contiene una propiedad url que tiene la información que 'que estas buscando. Puede obtener la propiedad de etapa desde cualquier DisplayObject en Flex.

trace (stage.loaderInfo.url);

+0

Gracias .. También puedo usar Application.application.stage.loaderInfo.url para obtenerlo de un NON DisplayObject, también da un error si intenta acceder antes de Application.CreationComplete. –

+0

Sí, no parece que la etapa esté lista hasta que se envíe el evento FlexEvent.APPLICATION_COMPLETE. –

1

No desde flash, afaik. ¿Para qué lo necesitas? Puede haber una mejor manera de hacerlo.

+0

Bueno, estoy construyendo una clase Logger personalizada, que enviará los registros a un script que se guardará. Lo estoy haciendo para poder reutilizar esta clase con otros proyectos. Así que quiero que la clase sea capaz de detectar automáticamente en qué proyecto se está ejecutando, para que también pueda registrarlo. –

1

Puede utilizar loaderInfo.loaderURL para obtener la ruta completa y el nombre de ustedes SWF

Ejemplo de una clase:

public class Main extends Sprite { 
private function init():void { 
    removeEventListener(Event.COMPLETE, init); 
    var myUrl:String=loaderInfo.loaderURL; 
    var tmp:Array=myUrl.split("/"); 
    var myName:String=tmp[tmp.length-1].split(".swf")[0]; 
} 

public function Main() { 
    super(); 
    if (stage) 
    init(); 
    else 
    addEventListener(Event.COMPLETE, init, false, 0, true); 
} 
} 
3

Solo una nota útil: Si carga un SWF en otro, el SWF cargado (interno) arrojará un resultado erróneo si usa loaderInfo.url para tratar de obtener el nombre del archivo. Por ejemplo, algo como:

Path/To/Outer.swf/[[DYNAMIC]]/1

En lugar de:

Path/To/Inner.swf

¡cuidado!

Dicho esto, aquí está el código que utilizo para obtener el nombre actual de SWF:

function SWFName(symbol:DisplayObject):String 
{ 
    var swfName:String; 
    swfName = symbol.loaderInfo.url; 
    swfName = swfName.slice(swfName.lastIndexOf("/") + 1); // Extract the filename from the url 
    swfName = swfName.slice(0, -4); // Remove the ".swf" file extension 
    swfName = new URLVariables("path=" + swfName).path; // this is a hack to decode URL-encoded values 
    return swfName; 
} 
1

cosas han cambiado un poco en las versiones más recientes, así que voy a dar una respuesta para Adobe Flash Builder 4.6 (orientado hacia Flash en el navegador, pero se entiende la idea).

<s:Application ... applicationComplete="alertSwfUrl()"> 

<fx:Script> 
<![CDATA[ 
    import mx.core.FlexGlobals; 

    private function alertSwfUrl():void { 
     var a:LoaderInfo = FlexGlobals.topLevelApplication.stage.loaderInfo; 
     ExternalInterface.call('alert', a.url); 
    } 

]]> 
</fx:Script> 

</s:Application 

Mira la LoaderInfo docs a encontrar la manera de utilizar el objeto loaderInfo asociado con el stage.

Cuestiones relacionadas