2008-12-30 85 views
8

我的產品打開網頁瀏覽器並將其指向包含本地Flash應用程序的HTML文件。如何以編程方式檢測此文件是否成功加載,以及是否拋出異常?有沒有辦法使用Javascript來做到這一點?檢測Flash應用程序是否使用Javascript正確加載?

從外部檢查文件是否存在於磁盤上是不夠的,因爲我看到其他故障發生(可能涉及競爭條件)。

回答

11

回答我的問題:https://sourceforge.net/forum/message.php?msg_id=5929756

  1. 定義,如果閃存加載應調用JavaScript函數。
  2. 從Flash文件的頂部調用此方法。
  3. 使用計時器來檢測回調是否永遠不會被調用。
  4. 首選從Flash調用Javascript函數,而不是從Javascript調用Flash函數。無論哪種方式,你都無法調用尚未加載的函數。保證瀏覽器在從Flash中調用Javascript函數之前完成加載Javascript函數比保證Flash在從Javascript調用它之前完成加載Flash函數要容易得多。

下面是一個例子:

  • 我使用swfobject嵌入Flash。
  • 我使用FlashVars來告訴Flash要調用哪個Javascript函數。如果頁面上有多個Flash對象,這非常有用。

閃存

var params:Object = LoaderInfo(this.root.loaderInfo).parameters; 
if (ExternalInterface.available) 
{ 
    var onLoaded:String = params["onLoaded"]; 
    if (onLoaded != null) 
     ExternalInterface.call(onLoaded, true); 
} 

的Javascript

var flashLoaded = false; 
var flashTimer; 

function onFlashLoaded() 
{ 
    flashLoaded = true; 
    clearTimeout(flashTimer); 
} 

function onFlashTimeout() 
{ 
    if (!isFlashLoaded) 
    { 
     // Remove the Flash object in case it is partially loaded 
     $("#videoFeed").empty(); 
     $("#videoFeed").append('<div id="flashObject"></div>'); 
     alert("Failed to load video player"); 
    } 
    clearTimeout(flashTimer); 
} 

function connectToVideo() 
{ 
    var flashvars = {}; 
    flashvars.onLoaded = "onFlashLoaded"; 

    var params = {}; 
    params.menu = false; 

    var attributes = {}; 

    isFlashLoaded = false; 
    flashTimer = setTimeout("onFlashTimeout()", 5000); 

    swfobject.embedSWF("flash/VideoFeed.swf", "flashObject", "800", "600", "11", "expressInstall.swf", flashvars, params, attributes); 
} 
+1

輝煌!這對今天會有很大的幫助:D – 2009-12-23 22:42:23

3

實際上,當HTML頁面完成加載,Flash內容可能不被完全加載呢。如果SWF沒有完成加載,那麼它會顯示失敗。

我通常建議的方法是在調用文檔類構造函數時立即通過ExternalInterface讓SWF調用JavaScript函數。基本上,假設除非調用JS函數,否則SWF加載失敗。

+0

夠公平了,但我需要更具體的方法來檢測是否發生故障。超時不夠可靠。 – Gili 2009-01-06 06:15:54

+0

這種方法的一個問題是,在同一頁面上不能有兩個閃存實例。或者至少你不知道哪一個觸發了回調。 – zimbatm 2010-07-16 00:29:38

相關問題