【发布时间】:2023-03-14 10:19:01
【问题描述】:
有没有一种方法可以以编程方式确定我的类正在运行的 .swf 的文件名?
谢谢!
【问题讨论】:
标签: apache-flex actionscript-3 flex3 filenames
有没有一种方法可以以编程方式确定我的类正在运行的 .swf 的文件名?
谢谢!
【问题讨论】:
标签: apache-flex actionscript-3 flex3 filenames
在最近的版本中情况发生了一些变化,所以我将给出 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 对象。
【讨论】:
只是一个有用的提示:如果您将一个 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;
}
【讨论】:
您可以使用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);
}
}
【讨论】:
Stage 有一个loaderInfo 属性,其中包含一个url 属性,其中包含您要查找的信息。您可以从 Flex 中的任何 DisplayObject 获取舞台属性。
trace(stage.loaderInfo.url);
【讨论】:
不是来自 Flash,afaik。你需要它做什么?可能有更好的方法来做到这一点。
【讨论】: