¿Hay alguna manera de determinar programáticamente el nombre de archivo del archivo .swf en el que se ejecuta mi clase?Flex: ¿obtiene el nombre del archivo SWF?
Gracias!
¿Hay alguna manera de determinar programáticamente el nombre de archivo del archivo .swf en el que se ejecuta mi clase?Flex: ¿obtiene el nombre del archivo SWF?
Gracias!
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);
No desde flash, afaik. ¿Para qué lo necesitas? Puede haber una mejor manera de hacerlo.
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. –
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);
}
}
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;
}
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
.
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. –
Sí, no parece que la etapa esté lista hasta que se envíe el evento FlexEvent.APPLICATION_COMPLETE. –