2009-02-10 18 views
10

我需要將任意flash對象的wmode更改爲透明的外部js文件,以確保它們不隱藏菜單,而不使用Jquery或類似的庫。更改任意flash對象wmode到透明

在FF中我使用getElementsByTagName("embed")並設置屬性。它似乎運作良好。

具體來說我有object設置swfObject庫的問題在IE7中。

swfObject創建在IE7下面的代碼:

<OBJECT id=mymovie height=400 width=134 classid=clsid:D27CDB6E-AE6D-11cf-96B8-444553540000> 
     <PARAM NAME="_cx" VALUE="3545"> 
     <PARAM NAME="_cy" VALUE="10583"> 
     <PARAM NAME="FlashVars" VALUE=""> 
     <PARAM NAME="Movie" VALUE="imgs/site/tower.swf"> 
     <PARAM NAME="Src" VALUE="imgs/site/tower.swf"> 
     <PARAM NAME="WMode" VALUE="Window"> 
     <PARAM NAME="Play" VALUE="0"> 
     <PARAM NAME="Loop" VALUE="-1"> 
     <PARAM NAME="Quality" VALUE="High"> 
     <PARAM NAME="SAlign" VALUE=""> 
     <PARAM NAME="Menu" VALUE="-1"> 
     <PARAM NAME="Base" VALUE=""> 
     <PARAM NAME="AllowScriptAccess" VALUE=""> 
     <PARAM NAME="Scale" VALUE="ShowAll"> 
     <PARAM NAME="DeviceFont" VALUE="0"> 
     <PARAM NAME="EmbedMovie" VALUE="0"> 
     <PARAM NAME="BGColor" VALUE="FFFFFF"> 
     <PARAM NAME="SWRemote" VALUE=""> 
     <PARAM NAME="MovieData" VALUE=""> 
     <PARAM NAME="SeamlessTabbing" VALUE="1"> 
     <PARAM NAME="Profile" VALUE="0"> 
     <PARAM NAME="ProfileAddress" VALUE=""> 
     <PARAM NAME="ProfilePort" VALUE="0"> 
     <PARAM NAME="AllowNetworking" VALUE="all"> 
     <PARAM NAME="AllowFullScreen" VALUE="false"> 
</OBJECT> 

我想盡一切可能的辦法設置wmodetransparent,使閃光燈無法掩蓋沒有成功,包括但不漂浮物不限於:

  1. 搜索OBJECT並將其PARAMwmode更改爲transparent
  2. Objectwmode=transparent
  3. 調用objectSetValue功能

無似乎工作的套裝屬性。儘管wmode似乎改變了Flash,但仍然隱藏了高度爲z-index的其他對象。我在這裏錯過了什麼?

+0

你可以多給點信息嗎?你只是試圖設置一次,還是關閉並重新打開?爲什麼在第一次建立頁面時無法設置wmode? – Andrew 2009-02-11 09:54:39

回答

2

當您使用SWFObject包含Flash時,應該在名爲'params'的embedSWF方法中有一個參數。你傳遞一個對象到這樣的:

swfobject.embedSwf(blah,blah,blah, { wmode:'transparent'}); 

more here

+0

感謝您的回答。我無法控制代碼的swfobject部分。當我的代碼運行時,對象已經創建。 – Nir 2009-02-11 07:44:43

+0

這是正確的做法。你應該真的看到你是否可以讓控制swfobject代碼的人添加額外的參數。 – jacobangel 2009-02-11 14:14:12

0

我敢肯定,幾乎100%,你不能在運行時改變wmode參數。我的意思是,你在技術上可以,但不會有任何效果。我真的很驚訝,你有任何成功的嘗試。您試過哪些Flash播放器版本和瀏覽器?

對不起,我找不到任何官方聯繫,以證明我的觀點,但我會離開你這個非常有趣的環節是如何的wmode作品(更新至播放器10):

What does GPU acceleration mean?

乾杯,

胡安

+0

我使用IE7和Flash播放器v 9e。 必須有一些解決方法。也許重新啓動播放器或重新加載電影?任何想法將不勝感激。我卡住了。 – Nir 2009-02-11 09:47:28

1

這不是真的,一個Flash電影需要重新發布修改wmode參數 - 它的一個神話:

http://www.communitymx.com/content/article.cfm?cid=E5141

我有相同的菜單問題,我需要一些代碼來將wmode參數添加到任何由javascript調用的flash對象。

我認爲原來的帖子屬於這個,但我不知道從哪裏開始,需要更多的信息。

10

我已經成功地用這種小伎倆:

$("embed").attr("wmode", "opaque").wrap('<div>'); 

它有效地重繪Flash對象,爲我工作。

+0

即時通訊不知道這是否是「最好」的方法,但它對我有用。謝謝。 – 2010-04-15 18:48:36

3

Cirday的解決方案總的來說是正確的。這裏有一個非jQuery版本,適用於IE,FF和Chrome:

var embed = document.getElementsByTagName('embed'); 
for(var i = 0; i < embed.length; i++){ 
    embed[i].setAttribute('wmode','opaque'); 
} 
// FF does a "live" array when working directly with elements, 
// so "els" changes as we add/remove elements; to avoid problems 
// with indexing, copy to a temporary array 
var els = document.getElementsByTagName('object'); 
var obj = []; 
for(var i = 0; i < els.length; i++){ 
    obj[i] = els[i]; 
} 
for(var i = 0; i < obj.length; i++){ 
    var param = document.createElement('param'); 
    param.setAttribute('name','wmode'); 
    param.setAttribute('value','opaque'); 
    obj[i].appendChild(param); 

    var wrapper = document.createElement('div'); 
    obj[i].parentNode.appendChild(wrapper); 

    if(obj[i].outerHTML){ 
     // IE 
     var html = obj[i].outerHTML; 
     obj[i].parentNode.removeChild(obj[i]); 
     wrapper.innerHTML = html; 
    }else{ 
     // ff/chrome 
     obj[i].parentNode.removeChild(obj[i]); 
     wrapper.appendChild(obj[i]); 
    } 
}