Flex:获取自己的SWF文件名?

时间:2009-12-22 20:49:08

标签: flex actionscript-3 flex3 filenames

有没有办法可以通过编程方式确定我的类正在运行的.swf的文件名?

谢谢!

5 个答案:

答案 0 :(得分:9)

Stage具有loaderInfo属性,其中包含url属性,其中包含您要查找的信息。您可以从Flex中的任何DisplayObject获取stage属性。

迹(stage.loaderInfo.url);

答案 1 :(得分:3)

只是一个有用的注意事项:如果您将一个SWF加载到另一个SWF中,如果您使用loaderInfo.url尝试获取文件名,则加载的(内部)SWF将返回错误的结果。例如,像:

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;
}

答案 2 :(得分:1)

不是来自闪光灯,afaik。你需要什么?可能有更好的方法来做到这一点。

答案 3 :(得分:1)

您可以使用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);
 }
}

答案 4 :(得分:1)

在最近的版本中,事情发生了一些变化,所以我会给出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 docs,了解如何使用与loaderInfo相关联的stage对象。