Gibt es eine Möglichkeit, den Dateinamen der SWF, in der meine Klasse ausgeführt wird, programmgesteuert zu bestimmen?Flex: Selbst SWF-Dateiname erhalten?
Danke!
Gibt es eine Möglichkeit, den Dateinamen der SWF, in der meine Klasse ausgeführt wird, programmgesteuert zu bestimmen?Flex: Selbst SWF-Dateiname erhalten?
Danke!
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);
Nicht von Flash, afaik. Wofür brauchst du es? Es könnte einen besseren Weg geben, es zu tun.
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. –
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);
}
}
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;
}
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.
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. –
Ja, sieht nicht aus wie Bühne bereit ist, bis das FlexEvent.APPLICATION_COMPLETE -Ereignis ausgelöst wird. –