Flex: Получить собственное имя SWF-файла? - PullRequest
6 голосов
/ 22 декабря 2009

Есть ли способ, которым я могу программно определить имя файла .swf, в котором работает мой класс?

Спасибо!

Ответы [ 5 ]

9 голосов
/ 23 декабря 2009

Этап имеет свойство loaderInfo , которое содержит свойство url , содержащее информацию, которую вы ищете. Вы можете получить свойство stage из любого объекта DisplayObject во Flex.

след (stage.loaderInfo.url);

3 голосов
/ 15 января 2012

Просто полезное примечание: если вы загрузите один 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;
}
1 голос
/ 15 июня 2012

Ситуация немного изменилась в более поздних версиях, поэтому я дам ответ для 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.

1 голос
/ 23 декабря 2009

Вы можете использовать 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);
 }
}
1 голос
/ 22 декабря 2009

Не изнутри вспышка, афаик. Для чего тебе это? Возможно, есть лучший способ сделать это.

...