2010-03-02 59 views
1

獲取可變我創建一個測驗,並在測驗計時器我有一個flash動畫(動畫時鐘)。我每秒輪詢一次時鐘以查看測驗時間是否已用完。問題與閃光燈使用JavaScript在IE8

此功能的代碼如下所示:(簡體)所有的

$(window).load(function() { 
    var flashMovie = getFlashMovieObject(flashId); 
    var timeElapsed = flashMovie.GetVariable("timeElapsed"); 
    var timeSet = flashMovie.GetVariable("countdown"); 
    var degrees = flashMovie.GetVariable("degrees"); 
    var timerStatus = flashMovie.GetVariable("timerStatus"); 
}); 

首先,它只是獲取Flash影片對象,然後調用對象上的一些方法。這工作正常在Firefox(PC & mac),Safari(mac),但在IE8上的PC它返回'線3意外錯誤'(或任何其他線路使用flashMovie對象)。

的getFlashMovieObject()的代碼功能如下:

function getFlashMovieObject(movieName) 
{  
    if (navigator.appName.indexOf ("Microsoft") !=-1) { 
     return window[movieName]; 
    } 

    return document[movieName]; 
} 

任何幫助表示讚賞!

更新:我已經發現,如果設置IE8清除每次重新加載的緩存,那麼會發生這種情況。如果我不這樣做,那麼它只會在第一次失敗,並且所有後續的重新加載都可以正常工作。 我不明白緩存如何解決此問題。

+0

您是否在Windows 7上使用64位IE8? – Robusto 2010-03-02 13:30:44

+0

不,我在Windows XP專業版上使用32位IE8 – Indyber 2010-03-02 13:35:27

回答

1

在我的經驗中,getFlashMovieObject功能在某些瀏覽器的一些怪癖,我發現了它的幾個版本。這一個似乎合理的不錯在大多數瀏覽器:

function getFlashMovieObject(movieName){ 
    if(document.embeds[movieName]) 
    return document.embeds[movieName]; 
    if(window.document[movieName]) 
    return window.document[movieName]; 
    if(window[movieName]) 
    return window[movieName]; 
    if(document[movieName]) 
    return document[movieName]; 
    return null; 
} 

如果你碰巧使用jQuery,我發現的東西作爲

$("#flashobject")[0].GetVariable("timeElapsed"); 

似乎在每一個瀏覽器中運行一樣簡單。

+1

我喜歡你這樣做的方式,但遺憾的是它對我的錯誤沒有影響。我嘗試了兩種解決方案,但錯誤仍然存​​在。 – Indyber 2010-03-02 13:49:26

+0

救了我的小時!在safari上工作! – 2015-03-13 23:58:35

0

在胡亂猜測,IE不正確燒製window.load事件太早,滿載您的SWF之前。這可以解釋爲什麼清理緩存會強制執行錯誤。

如果你沒有這樣做,用SWFObject嵌入您的Flash,那麼你可以使用加載回調到什麼時候您的Flash對象實際上是可用的。