2009-09-08 29 views
1

我正在使用swfObject在我的應用程序中嵌入flash播放器。偶爾,當我嘗試與嵌入式閃存對象進行通信時,我發現FireFox中存在錯誤(僅在IE或Chrome中)。錯誤說「SetVariable不是函數」。導致此錯誤的代碼剛好在不久前執行,現在顯示此錯誤。如果我重新加載頁面並重新運行,那麼賠率是不錯的,這不會再發生。Firefox中的零星「SetVariable不是函數」

我在網上看到關於FF與SetVariable不能很好地工作,但沒有解決它的報告。顯然swfObject應該隱藏所有這些,但它不會。

這裏是我的代碼如下所示:

... 
var flashvars=... 
var params=... 
var attributes = {}; 
attributes.id = "my_player"; 

if(swfobject.hasFlashPlayerVersion("9.0.0")) 
{ 
    swfobject.embedSWF("my_player_js.swf", "my_player_holder", "1", "1", "9.0.0", "", flashvars, params, attributes); 
} 
.... 

document.getElementById("my_player").SetVariable("method:stop", ""); 

最後一行,在FF,有時導致「SetVariable不是一個函數」的錯誤。

任何建議在哪裏看?

回答

1

您應該使用ExternalInterface的替代,它比SetVariable(速度較慢,但​​除非你真的需要的速度,你應該使用它)更強大

,通常會導致這種情況的一個常見的情況是試圖調用在swf加載之前的SetVariable調用。通常,將swf呼叫轉到頁面並告訴js在嘗試調用方法之前已準備好接收呼叫會更安全。

既然你說'導致這個錯誤的代碼剛剛執行得很好',這讓我認爲上述可能不是你的問題,但無論如何它值得檢查。也許如果你正在修改頁面上的swf,瀏覽器正試圖重新加載它,並導致它一次消失幾毫秒?對於錯誤.SetVariable

0

我不知道swfObject或Flash,但是如果在對象被初始化之前運行代碼,經常會發生類似於這些錯誤的錯誤。什麼觸發你的代碼運行?負載? DOMContentLoaded?

2

一種解決方案是不是在Firefox的功能是

給標識&名稱屬性比對象標籤的ID和名稱值不同的值。

var isInternetExplorer = navigator.appName.indexOf("Microsoft") != -1; 
// Handle all the FSCommand messages in a Flash movie. 
var bannerObj = isInternetExplorer ? document.all.banner : document.banner; 
function getFlashMovieObject(movieName) 
{ 
    if (window.document[movieName]) 
    { 
     return window.document[movieName]; 
    } 
    if (navigator.appName.indexOf("Microsoft Internet")==-1) 
    { 
    if (document.embeds && document.embeds[movieName]) 
     return document.embeds[movieName]; 
    } 
    else // if (navigator.appName.indexOf("Microsoft Internet")!=-1) 
    { 
    return document.getElementById(movieName); 
    } 

} 

function LoadRefference() 
{ 
bannerObj = getFlashMovieObject("banner"); 
if(typeof(bannerObj.SetVariable)=='undefined') 
    bannerObj = document.getElementById('embbanner'); 
} 

確保LoadRefference文件後,被稱爲是完全loaded.you可以調用它的document.ready方法

穆罕默德哈立德努爾

相關問題