【问题标题】:Flex: Get self SWF file name?Flex:获取自己的 SWF 文件名?
【发布时间】:2023-03-14 10:19:01
【问题描述】:

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

谢谢!

【问题讨论】:

    标签: apache-flex actionscript-3 flex3 filenames


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      只是一个有用的提示:如果您将一个 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;
      }
      

      【讨论】:

        【解决方案3】:

        您可以使用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】:

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

          trace(stage.loaderInfo.url);

          【讨论】:

          • 谢谢.. 我也可以使用 Application.application.stage.loaderInfo.url 从非 DisplayObject 中获取它,如果您尝试在 Application.CreationComplete 之前访问它也会出错。跨度>
          • 是的,在调度 FlexEvent.APPLICATION_COMPLETE 事件之前,舞台似乎还没有准备好。
          【解决方案5】:

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

          【讨论】:

          • 好吧,我正在构建一个自定义 Logger 类,这会将日志发送到要保存的脚本。我正在制作它,以便我可以在其他项目中重用这个类。所以我希望这个类能够自动检测它正在运行的项目,所以它也可以记录下来。
          猜你喜欢
          • 2011-06-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-28
          • 1970-01-01
          • 1970-01-01
          • 2011-06-23
          • 1970-01-01
          相关资源
          最近更新 更多