簡體   English   中英

在IE8中使用JavaScript從Flash中獲取變量的問題

[英]Problems with fetching variable from flash with javascript in IE8

我正在創建一個測驗,並且作為測驗中的計時器,我有一個Flash電影(一個動畫時鍾)。 我每秒查詢一次時鍾,以查看測驗時間是否用完。

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

$(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)中運行良好,但在PC上的IE8中,它會返回“第3行出現意外錯誤”(或其他任何使用flashMovie對象的行)。

getFlashMovieObject()函數的代碼如下所示:

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

    return document[movieName];
}

任何幫助表示贊賞!

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

以我的經驗,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");

似乎適用於所有瀏覽器。

令人吃驚的是,IE在完全加載SWF之前錯誤地觸發window.load事件。 這也許可以解釋為什么清除緩存會導致錯誤。

如果尚未這樣做,請使用SWFObject嵌入Flash,然后可以使用已加載的回調來知道Flash對象何時真正可用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM