2009-02-10 19 views
10

Necesito cambiar wmode de objetos flash arbitrarios a archivos js transparentes para asegurarse de que no oculten menús sin usar Jquery o libs similares.Cambiar objetos flash arbitrarios wmode a transparente

En FF utilizo getElementsByTagName("embed") y establezco el atributo. Parece que funciona bien.

Específicamente, tengo problemas con object establecido por swfObject library En IE7.

swfObject crea el siguiente código en Internet Explorer 7:

<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> 

Probé todas las formas posibles para establecer wmode a transparent y hacer que el flash no ocultar objetos flotantes sin éxito, incluyendo pero no limitado a:

  1. Busque OBJECT y cambie su PARAMwmode por transparent.
  2. Conjunto de atributos de Object (wmode=transparent)
  3. llamada SetValue función de la object 's

Nada parece funcionar. Aunque la wmode parece cambiar Flash todavía oculta otros objetos con alto z-index. ¿Que me estoy perdiendo aqui?

+0

¿Puede darnos un poco más de información? ¿Estás tratando de configurar esto una vez, o para apagarlo y encenderlo de nuevo? ¿Por qué no puedes configurar el wmode cuando la página se construye por primera vez? – Andrew

Respuesta

2

Cuando está utilizando SWFObject para incluir el flash, debe haber un parámetro en el método embedSWF llamado 'params'. Se le pasa un objeto en él de esta manera:

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

more here

+0

Gracias por responder. No tengo control sobre la parte swfobject del código. Cuando mi código se ejecuta, el objeto ya está creado. – Nir

+0

Esta es la forma correcta de hacerlo. Realmente debería ver si puede conseguir que la persona que controla el código swfobject agregue el parámetro adicional. – jacobangel

0

estoy casi 100% seguro de que no se puede cambiar el parámetro wmode en tiempo de ejecución. Quiero decir, técnicamente puedes, pero no tendrá ningún efecto. De hecho, me sorprende que hayas tenido algún intento exitoso. ¿Qué versión de Flash player y navegador intentó con éxito?

lo siento no puedo encontrar ningún vínculo oficial para probar mi punto, pero te dejo este enlace muy interesante sobre cómo funciona (actualizado hasta el reproductor 10) embed:

What does GPU acceleration mean?

Saludos,

Juan

+0

Uso IE7 y flash player v 9e. Debe haber alguna solución. ¿quizás reiniciar el reproductor o volver a cargar la película? Cualquier idea sera apreciada. Estoy atascado. – Nir

1

no es cierto que una película flash tiene que ser reeditado para cambiar el parámetro wmode - es un mito:

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

Tengo el mismo problema de menú, y necesito un código para agregar el parámetro wmode a cualquier objeto flash que llame javascript.

Creo que la publicación original se refiere a esto, pero no estoy seguro de por dónde empezar y necesito más información.

10

he tenido éxito con este pequeño truco:

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

vuelve a dibujar de manera efectiva el objeto flash, trabajó para mí.

+0

No estoy seguro si este es el "mejor" método, pero funcionó para mí. Gracias. –

+0

¡qué campeón! – ifightcrime

3

La solución de Cirday en general es la correcta. Aquí hay una versión que no es jQuery, que funciona en IE, FF y 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 mi día !!!!!! – Shawn

Cuestiones relacionadas