2009-12-22 85 views

回答

8

StageloaderInfo属性,它包含有信息的url属性,你正在寻找。您可以从Flex中的任何DisplayObject获取stage属性。

trace(stage.loaderInfo.url);

+0

谢谢..此外,我可以使用Application.application.stage.loaderInfo.url从非DisplayObject获取它,如果您尝试在Application.CreationComplete之前访问它,它也会给出一个错误。 – 2009-12-22 21:11:03

+0

是的,直到FlexEvent.APPLICATION_COMPLETE事件被分派后才看起来舞台已经准备就绪。 – 2009-12-22 21:18:12

1

不在闪光灯内,afaik。你需要什么?可能有更好的方法来做到这一点。

+0

那么我正在构建一个自定义记录器类,它会将日志发送到一个脚本来保存。我正在做这个,所以我可以在其他项目中重复使用这个类。所以我希望这个类能够自动检测它正在运行的项目,因此它也可以记录它。 – 2009-12-22 20:57:04

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); 
} 
} 
3

只是一个有用的注意事项:如果您加载一个SWF到另一个,加载(内部)的SWF将返回错误的结果,如果您使用loaderInfo.url来尝试获取文件名。举例来说,像这样:

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; 
} 
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对象。