Есть ли способ программно определить имя файла .swf, в котором работает мой класс?
Спасибо!
Есть ли способ программно определить имя файла .swf, в котором работает мой класс?
Спасибо!
Stage имеет loaderInfo, которое содержит url, в котором содержится искомая информация. Вы можете получить свойство stage из любого объекта DisplayObject в Flex.
трассировка (стадия.loaderInfo.url);
Просто полезное замечание: если вы загрузите один SWF в другой, загруженный (внутренний) SWF вернет ошибочный результат, если вы используете loaderInfo.url, чтобы попытаться получить имя файла. Например, что-то вроде:
Path/To/Outer.swf/[[DYNAMIC]]/1
Вместо:
Path/To/Inner.swf
Остерегаться!
Тем не менее, вот код, который я использую для получения текущего имени 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;
}
Не изнутри flash, афаик. Для чего тебе это? Там может быть лучший способ сделать это.
Вы можете использовать loaderInfo.loaderURL, чтобы получить полный путь и имя вашего 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);
}
}
В более поздних версиях все немного изменилось, поэтому я дам ответ для Adobe Flash Builder 4.6 (ориентированный на Flash в браузере, но вы поняли идею).
<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
Ознакомьтесь с документами LoaderInfo, чтобы понять как использовать объект loaderInfo, связанный с stage.