2009-07-01 64 views
2

我一直有無盡的問題,使用swfobject.embedSwf在IE 6,7,8內嵌入一個動態加載的SWF到HTML窗體中。是否可以在IE6 +中使用swfobject 2+嵌入SWF格式?

該問題的所有建議的手動解決方法都涉及從窗口對象創建對Object DOM元素的引用。例如:

window[id] = document.getElementById(id); 

其中,id是swf對象dom元素的id。在我的情況下,我不能將window[id]設置爲swf對象ID,因爲它尚未創建!

在swfobject的是造成了JavaScript錯誤的路線是:

el.outerHTML = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"' + att + '>' + par + '</object>'; 

隨着SWF影片設置它的JavaScript外部接口嘗試訪問窗口[ID]。由於這不存在,它失敗了。

如果我應用上面提到的解決方法,並使用被embedSwf替換的DOM元素填充window[id],它仍然會失敗,因爲它試圖調用div DOM元素上的Flash特定方法而不是對象DOM元素。

我發現自從Flash 8和IE6以來,這個問題一直沒有被修復!

回答

2

我不確定您遇到問題的位置。 ExternalInterface和SWFObject在IE6/7/8中工作得很好。看到這個example(這個例子的解釋是here

當你說'在窗體中嵌入swf'時,你究竟想要做什麼?如果您將swf嵌入到div中,div是否處於表單或身體其他任何位置都無關緊要。

這裏是一個example of a SWF in a form

作爲窗口[ID],這是被廢棄的方法,應由的document.getElementById(ID)代替。許多舊的Flash教程/文檔在使用ExternalInterface時都聲稱使用window [id],但是現在每個主流瀏覽器都支持W3C標準document.getElementbyId,因此該建議可以安全地忽略。這包括IE6/7/8,Firefox,Safari/Webkit,Opera等。

就試圖找到它之前存在的元素而言,這是一個計時問題。 SWFObject將SWF嵌入到domready/onload中,這意味着在加載SWF之前,您不應該嘗試調用ExternalInterface。您可以通過將任何代碼你在domready中函數編寫這樣做:

swfobject.addDomLoadEvent(function(){ 
    //safe to execute code on your embedded SWF in here 
}); 

SWFObject的2.2有一個新的回調功能,讓你儘快SWF已嵌入調用的函數。 Bobby Van der Sluis有一個example you can 'view source' onSWFObject API documentation涵蓋了它的用法。

希望幫助

--philip

相關問題