2009-02-10 9 views
10

Devo modificare wmode di oggetti flash arbitrari in modo trasparente da file js esterni per essere certi che non nascondano i menu senza utilizzare Jquery o librerie simili.Modifica di oggetti flash arbitrari wmode su trasparente

In FF uso getElementsByTagName("embed") e imposta attributo. Sembra che funzioni bene.

In particolare, ho problemi con object impostato dalla libreria swfObject In IE7.

swfObject crea il seguente codice in 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> 

Ho cercato ogni modo possibile per impostare wmode-transparent e rendere il flash non nasconde gli oggetti mobili senza successo compreso ma non limitato a:

  1. Cerca OBJECT e cambia il suo PARAMwmode a transparent.
  2. impostare l'attributo di Object (wmode=transparent)
  3. chiamata SetValue funzione di 's il object

Nessuno sembra funzionare. Sebbene il wmode sembra cambiare Flash nasconde ancora altri oggetti con alto z-index. Cosa mi manca qui?

+0

Puoi fornire qualche informazione in più? Stai solo provando a impostarlo una volta o spegnerlo e riaccenderlo? Perché non riesci a impostare wmode quando la pagina viene creata per la prima volta? – Andrew

risposta

2

Quando si utilizza SWFObject per includere il flash, dovrebbe esserci un parametro nel metodo embedSWF chiamato "params". Si passa un oggetto in questo modo:

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

more here

+0

Grazie per aver risposto. Non ho controllo sulla parte swfobject del codice. Quando il mio codice viene eseguito, l'oggetto è già stato creato. – Nir

+0

Questo è il modo corretto per farlo. Dovresti davvero vedere se puoi ottenere la persona che controlla il codice swfobject per aggiungere il parametro extra. – jacobangel

0

Sono sicuro quasi al 100% che non è possibile modificare il parametro wmode in fase di esecuzione. Voglio dire, tecnicamente puoi, ma non avrà alcun effetto. Sono davvero sorpreso che tu abbia avuto dei tentativi riusciti. Quale versione e browser di Flash Player hai provato con successo?

Mi dispiace non riesco a trovare alcun link ufficiale per dimostrare il mio punto, ma vi lascio questo link molto interessante su come funziona (aggiornati al giocatore 10) wmode:

What does GPU acceleration mean?

Cheers,

Juan

+0

Uso IE7 e Flash Player v 9e. Ci deve essere qualche soluzione. forse riavviare il player o ricaricare il film ??? Qualsiasi idea sarebbe apprezzata. Sono bloccato. – Nir

1

non è vero che un filmato flash ha bisogno di essere ripubblicato per modificare il parametro wmode - è un mito:

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

Ho lo stesso problema di menu e ho bisogno di codice per aggiungere il parametro wmode a qualsiasi oggetto flash chiamato da javascript.

Penso che il post originale riguardi questo, ma non sono sicuro da dove iniziare e ho bisogno di maggiori informazioni.

10

ho avuto successo con questo piccolo trucco:

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

ridisegna in modo efficace l'oggetto flash, ha lavorato per me.

+0

Non sono sicuro che questo sia il metodo "migliore" ma ha funzionato per me. Grazie. –

+0

che campione! – ifightcrime

3

La soluzione di Cirday in generale è quella giusta. Ecco una versione non jQuery, che funziona in IE, FF e 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]); 
    } 
} 
+0

salva la mia giornata !!!!!! – Shawn

Problemi correlati