Flex:获取自己的 SWF 文件名?
Posted
技术标签:
【中文标题】Flex:获取自己的 SWF 文件名?【英文标题】:Flex: Get self SWF file name? 【发布时间】:2010-12-29 06:36:49 【问题描述】:有没有一种方法可以以编程方式确定我的类正在运行的 .swf 的文件名?
谢谢!
【问题讨论】:
【参考方案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 以了解如何使用与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 文件名?的主要内容,如果未能解决你的问题,请参考以下文章