2009-12-22 21 views

Trả lời

8

Stage có một tài sản loaderInfo, trong đó có một tài sản mà có các thông tin url bạn 'Đang tìm kiếm. Bạn có thể lấy thuộc tính stage từ bất kỳ DisplayObject nào trong Flex.

theo dõi (stage.loaderInfo.url);

+0

Cảm ơn .. Ngoài ra tôi có thể sử dụng Application.application.stage.loaderInfo.url để lấy nó từ một NON DisplayObject, nó cũng đưa ra một Error nếu bạn cố gắng truy cập nó trước khi Application.CreationComplete. –

+0

Có, không giống như giai đoạn sẵn sàng cho đến khi sự kiện FlexEvent.APPLICATION_COMPLETE được gửi đi. –

1

Không phải từ trong flash, afaik. Mày cần nó để làm gì? Có thể có một cách tốt hơn để làm điều đó.

+0

Vâng tôi đang xây dựng một lớp Logger tùy chỉnh, Điều đó sẽ gửi các bản ghi đến một tập lệnh được lưu. Tôi đang làm cho nó để tôi có thể tái sử dụng lớp này với các dự án khác. Vì vậy, tôi muốn các lớp học để có thể tự động phát hiện những gì dự án nó đang chạy, vì vậy nó có thể đăng nhập đó là tốt. –

1

Bạn có thể sử dụng loaderInfo.loaderURL để có được đường dẫn đầy đủ và tên của bạn swf

Ví dụ về một lớp học:

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

Lưu ý hữu ích: Nếu bạn tải một SWF vào một SWF khác, SWF được tải (bên trong) sẽ trả lại kết quả sai nếu bạn sử dụng loaderInfo.url để cố lấy tên tệp. Ví dụ, một cái gì đó như:

Path/To/Outer.swf/[[DYNAMIC]]/1

Thay vì:

Path/To/Inner.swf

Hãy coi chừng!

Điều đó nói rằng, đây là đoạn code tôi sử dụng để có được tên SWF hiện tại:

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

Mọi thứ đã thay đổi một chút trong các phiên bản gần đây vì vậy tôi sẽ đưa ra một câu trả lời cho Adobe Flash Builder 4.6 (hướng hướng tới Flash trong trình duyệt, nhưng bạn có ý tưởng).

<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 

Kiểm tra các LoaderInfo docs để tìm ra cách để sử dụng đối tượng loaderInfo gắn liền với stage.

Các vấn đề liên quan