2011-04-15 37 views
0

是否有一種方法(在JavaScript中)檢測嵌入式.swf是否使用Flash Professional或Flex創建的。如何檢測嵌入式swf是否使用Flex中的Flex或Flash創建的

我們有一個包含多個選項卡的頁面,每個選項卡都可以包含一個.swf文件。所有選項卡都在相同的HTML文件中定義,當包含選項卡變爲活動狀態時,JavaScript框架在swf上調用.rewind().play()

這對於常規Flash動畫非常有用,確保它們在打開標籤時從頭開始播放。然而,在用Flex創建的SWF中,倒帶和播放對Flex框架造成嚴重破壞,應用程序無法加載。

我們想出來檢測Flex的最佳方式是計算.swf擁有​​的幀數。用flex總是2.但這聽起來不是最好的方式。

我們也試圖與ExternalInterface的在Flex應用程序預初始化事件添加的回調方法。不幸的是,這個事件在應用程序啓動時被稱爲相當晚,並且javasctipt代碼在Flex代碼添加之前檢查回調。

是否有任何其他方式來檢測(從JavaScript)如果.swf是使用Flex創建的?

回答

0

好吧,那麼,回答我自己的問題,DownloadProgressBar(加載在第一幀)可以定製(超載)。

所以,這是自定義的進度條,即增加了一個isFlex()回調方法爲Javascript:

package flexidentifier { 
    import flash.external.ExternalInterface; 
    import mx.preloaders.DownloadProgressBar; 

    public class FlexIdentifierDownloadProgressBar extends DownloadProgressBar { 
     public function FlexIdentifierDownloadProgressBar() { 
      super(); 
      ExternalInterface.addCallback("isFlex", callback); 
     } 

     protected function callback():String { 
     return "true"; 
     } 
    } 
} 

不要忘了將它添加到應用程序:

<s:Application xmlns:s="library://ns.adobe.com/flex/spark" preloader="flexidentifier.FlexIdentifierDownloadProgressBar"> 
</s:Application> 

它如果Adobe的人員把它放在Flex框架中,那麼本來會很好。

1

簡答題,沒有。 Flex IS Flash;它只是Flash上​​的一個增加層,可以提高開發效率。

但是,您可能有一個解決方案,但我需要知道您是否自己創建了swfs,以及是否可以修改它們。如果可以的話,我會使用ExternalInterface callback通過在JS中調用該函數來「播放」swf(即。document.getDocumentById('swfId').someFunction();)。

另一種解決方案是讓所有的swfs在加載後立即播放,然後只在需要時將它們加載到JS中(而不是進行預加載)。如果你需要'倒帶',只需重新加載它們(應該很容易,如果你使用SWFObject,只需刪除並加回)。

+0

是的,試圖通過ExternalInterface添加回調。問題是,我最快可以使該功能可用於應用程序預初始化。我希望Flex框架添加它自己的回調。但是我瀏覽了SDK資源並沒有發現這樣的事情。我不認爲有一種方法可以在SystemManager,Preloader或DownloadPreferralBar中插入代碼... – Jochen 2011-04-15 15:47:47

+0

爲什麼不在加載時自動播放?另外,如果您想要控制swf auto是否播放,可以使用[FlashVars](http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf626ae-7feb)。HTML),這是很容易與SWFObject實現。 – 2011-04-15 15:54:04

+0

事情是,我的同事照顧的Javascript部分,我不完全確定他爲什麼這樣做。此外,問題的一部分是,實際的HTML頁面是從使用另一個工具創建的內容生成的。但實際上有一種方法可以添加一個自定義的DownloadProgressBar。這樣,回調(isFlex())可以在Flex啓動序列的早期添加。我會在稍後發佈解決方案 – Jochen 2011-04-15 16:15:32

相關問題