2010-03-02 56 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对象实际上是可用的。