example javascript flash object swfobject wmode

javascript - swfobject example



Cambio de objetos flash arbitrarios wmode a transparente (5)

Cuando está utilizando SWFObject para incluir el flash, debe haber un parámetro en el método embedSWF llamado ''params''. Usted le pasa un objeto en esto así:

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

más aquí

Necesito cambiar wmode de objetos flash arbitrarios a transparente desde el archivo js externo para asegurarme de que no oculten los menús sin usar Jquery o libs similares.

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

Específicamente, tengo problemas con el conjunto de swfObject biblioteca swfObject en IE7.

swfObject crea el siguiente código en 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>

Probé todas las formas posibles para configurar wmode en transparent y hacer que el flash no oculte los objetos flotantes sin éxito, incluidos, entre otros:

  1. Busque OBJECT y cambie su modo PARAM a transparent .
  2. Establecer atributo de Object ( wmode=transparent )
  3. Llamar a la función SetValue del object

Ninguno parece funcionar. Aunque el modo w parece cambiar Flash, aún oculta otros objetos con alto z-index . ¿Que me estoy perdiendo aqui?


Estoy casi 100% seguro de que no puedes 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?

Lamento no poder encontrar ningún enlace oficial para probar mi punto, pero te dejaré este enlace muy interesante sobre cómo funciona wmode (actualizado al reproductor 10):

¿Qué significa aceleración GPU?

Aclamaciones,

Juan


No es cierto que una película flash deba volver a publicarse 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 javascript llame.

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


He tenido éxito con este pequeño truco:

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

Redacta eficazmente el objeto flash, funcionó para mí.


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]); } }