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

Posted

技术标签:

【中文标题】Flex:获取自己的 SWF 文件名?【英文标题】:Flex: Get self SWF file name? 【发布时间】:2010-12-29 06:36:49 【问题描述】:

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

谢谢!

【问题讨论】:

【参考方案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 类,这会将日志发送到要保存的脚本。我正在制作它,以便我可以在其他项目中重用这个类。所以我希望这个类能够自动检测它正在运行的项目,所以它也可以记录下来。

以上是关于Flex:获取自己的 SWF 文件名?的主要内容,如果未能解决你的问题,请参考以下文章

ffmpeg:将纯音频 flv 转换为 swf

Flex简述1

Flex中加载的SWF文件的帧率不同?

在 Flex 中将 GIF 转换为 SWF

关于跨域策略文件crossdomain.xml文件

检查 swf 文件是不是正在我们自己的服务器上播放