2009-12-22 10 views

Antwort

8

Stage hat eine loaderInfo Eigenschaft, die eine url Eigenschaft enthält, die Informationen hat Sie Ich suche nach. Sie können die stage-Eigenschaft von einem beliebigen DisplayObject in Flex abrufen.

Ablaufverfolgung (stage.loaderInfo.url);

+0

Danke .. Auch ich kann Application.application.stage.loaderInfo.url verwenden, um es von einem NON DisplayObject zu erhalten, auch gibt es einen Fehler, wenn Sie versuchen, es vor Application.CreationComplete zuzugreifen. –

+0

Ja, sieht nicht aus wie Bühne bereit ist, bis das FlexEvent.APPLICATION_COMPLETE -Ereignis ausgelöst wird. –

1

Nicht von Flash, afaik. Wofür brauchst du es? Es könnte einen besseren Weg geben, es zu tun.

+0

Nun ich baue eine benutzerdefinierte Logger-Klasse, die die Protokolle an ein Skript zum Speichern gesendet wird. Ich mache es, damit ich diese Klasse mit anderen Projekten wiederverwenden kann. Ich möchte also, dass die Klasse automatisch erkennen kann, in welchem ​​Projekt sie läuft, damit sie auch protokolliert werden kann. –

1

Sie können loaderInfo.loaderURL verwenden Sie den vollständigen Pfad und Namen zu bekommen von Ihnen

Beispiel einer Klasse swf:

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

Nur ein hilfreicher Hinweis: Wenn Sie eine SWF in eine andere laden, gibt die geladene (innere) SWF ein fehlerhaftes Ergebnis zurück, wenn Sie loaderInfo.url verwenden, um den Dateinamen abzurufen. Zum Beispiel so etwas wie:

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

Statt:

Path/To/Inner.swf

Vorsicht!

Das heißt, hier ist der Code Ich verwende den aktuellen SWF-Namen erhalten:

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

Dinge ein wenig in neueren Versionen geändert haben, so werde ich eine Antwort für Adobe Flash Builder 4.6 (Getriebe geben Flash im Browser, aber Sie bekommen die Idee).

<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 

Überprüfen Sie die LoaderInfo docs, um herauszufinden, wie die loaderInfo mit dem stage zugeordnete Objekt verwenden.

Verwandte Themen