有没有办法可以通过编程方式确定我的类正在运行的.swf的文件名?
谢谢!
答案 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
对象。