2012-03-15 37 views
2
  • 如何獲取flash對象在瀏覽器中加載所需的時間,從創建對象直到它處於就緒狀態?

回答

4

如果你只是想測量Flash對象的加載時間,你可以使用FireBug。但是,如果您想知道Flex應用程序何時完全可以使用(即所有RSL已加載;所有初始數據都已加載),我認爲有兩種方法。一個在應用程序中,使用自定義預加載器開始計時並在條件滿足時停止計時。其他通過JavaScript和​​。我認爲後者會給你最準確的結果,因爲在加載預加載器之前可能已經有一段延遲了。

JavaScript和ExternalInterface的

我從來沒有做過這個,所以我剛要解釋我的想法。在Javascript中,您可以在Flash對象開始加載時創建一個'date'對象。您可能正在使用SWFObject將Flash對象注入頁面,因此您可能會將其插入某處。然後在您的Flex應用程序中,當滿足必要的條件(您定義了這些條件)時,您可以使用ExternalInterface.call()來告訴JavaScript Flex應用程序已準備就緒。做一個新的'日期'並減去第一個'日期',並且你有你的加載時間。

使用ExternalInterface的更多信息可以在文檔中找到:http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7cb2.html

詳細

創建JavaScript函數,我們會打電話給當應用程序已準備就緒:

function onFlexAppReady() { 
    var end = new Date().getTime(); 
    var loadTime = end - start; //in ms. 
} 

現在在FlashBuilder生成的代碼中,添加swf注入之前的開始時間:

var start = new Date().getTime(); 
swfobject.embedSWF(
      "MyFlexApp.swf", "flashContent", 
      "100%", "100%", 
      swfVersionStr, xiSwfUrlStr, 
      flashvars, params, attributes); 

最後,在你的Flex應用程序,在合適的條件得到滿足,調用JavaScript函數:

ExternalInterface.call("onFlexAppReady"); 

再次,這是所有未經測試的代碼,但它應該讓你開始。

+0

如果你想避免外部接口調用,SWFObject的embedSWF方法在「屬性」後面實際上有一個更多的可選屬性。這是一個回調方法,將在flash完全加載時調用。 swfobject.embedSWF(「MyFlexApp.swf」,「flashContent」,「100%」,「100%」,swfVersionStr,xiSwfUrlStr,flashvars,params,屬性,onFlexAppReady); – 2012-03-15 12:20:53

+0

@JamesTomasino加載Flash應用程序或加載完整Flex應用程序(包括框架RSL)時調用該函數嗎?這不是一回事:我猜想第一個選項,在這種情況下,當Flex框架只開始加載時,它將被調用。無論哪種方式,它都將不會等到初始數據加載完成。 – RIAstar 2012-03-15 14:26:50

+0

它在ExternalInterface回調變爲可用時被調用。這絕對是衡量加載swf本身需要多長時間,而不是任何支持資產或數據。 – 2012-03-15 14:41:03