2009-12-22 19 views

risposta

8

Stage ha una proprietà loaderInfo, che contiene una proprietà url che ha le informazioni che stai cercando. È possibile ottenere le proprietà dello stage da qualsiasi DisplayObject in Flex.

trace (stage.loaderInfo.url);

+0

Grazie .. Anche io posso usare Application.application.stage.loaderInfo.url per ottenerlo da un NON DisplayObject, inoltre dà un errore se provi ad accedervi prima di Application.CreationComplete. –

+0

Sì, non sembra che lo stage sia pronto finché non viene inviato l'evento FlexEvent.APPLICATION_COMPLETE. –

1

Non dal flash, afaik. A cosa ti serve? Potrebbe esserci un modo migliore per farlo.

+0

Beh, sto creando una classe di Logger personalizzata, che invierà i registri a uno script da salvare. Lo sto facendo in modo che possa riutilizzare questa lezione con altri progetti. Quindi voglio che la classe sia in grado di rilevare automaticamente il progetto in cui è in esecuzione, in modo che possa registrare anche quello. –

1

È possibile utilizzare loaderInfo.loaderURL per ottenere il percorso completo e il nome di voi swf

esempio di classe:

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 utile: se si carica un SWF in un altro, il SWF (interno) caricato restituirà un risultato errato se si utilizza loaderInfo.url per tentare di ottenere il nome file. Per esempio, qualcosa come:

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

Invece di:

Path/To/Inner.swf

Beware!

Detto questo, ecco il codice che uso per ottenere la corrente nome 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

Le cose sono cambiate un po 'nelle versioni più recenti in modo da darò una risposta per Adobe Flash Builder 4.6 (orientati verso Flash nel browser, ma si ottiene l'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 

Scopri i LoaderInfo docs per capire come utilizzare l'oggetto loaderInfo associato alla stage.

Problemi correlati