Esiste un modo per determinare a livello di codice il nome file di .swf in cui è in esecuzione la mia classe?Flex: ottieni il nome del file SWF automatico?
Grazie!
Esiste un modo per determinare a livello di codice il nome file di .swf in cui è in esecuzione la mia classe?Flex: ottieni il nome del file SWF automatico?
Grazie!
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);
Non dal flash, afaik. A cosa ti serve? Potrebbe esserci un modo migliore per farlo.
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. –
È 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);
}
}
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;
}
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
.
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. –
Sì, non sembra che lo stage sia pronto finché non viene inviato l'evento FlexEvent.APPLICATION_COMPLETE. –