Foros del Web » Programando para Internet » Javascript » Frameworks JS »

El flash que le paso a un innerHTML no se carga, pq???

Estas en el tema de El flash que le paso a un innerHTML no se carga, pq??? en el foro de Frameworks JS en Foros del Web. Hola, tengo un problema que seguramente es sencillo pero que no se como se resuelve... vereis tengo una función de javascript que lo que hace ...
  #1 (permalink)  
Antiguo 28/09/2006, 05:47
Avatar de skaperna  
Fecha de Ingreso: marzo-2005
Ubicación: Barcelona
Mensajes: 84
Antigüedad: 19 años, 1 mes
Puntos: 1
El flash que le paso a un innerHTML no se carga, pq???

Hola,

tengo un problema que seguramente es sencillo pero que no se como se resuelve... vereis tengo una función de javascript que lo que hace es recargar en un div, que tengo definido e identificado via id, un objeto flash.

El código que utilizo es el siguiente (dentro de una función):
Código PHP:
// parsedData[4] --> directorio de idioma
// parsedData[3] --> parte del nombre del flash
document.getElementById("avatar_man").innerHTML "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' WIDTH='250' HEIGHT='200' id='Movie1' name='Movie1'> 
<PARAM NAME='movie'   VALUE='swf/"
+parsedData[4]+"/"+parsedData[3]+"MAN.swf'/> 
<PARAM NAME='quality' VALUE='high'/>     
<PARAM NAME='bgcolor' VALUE='#ffffff'/> 
<PARAM NAME='loop' VALUE='false'/>
<PARAM NAME='menu' VALUE='false'/>
<EMBED src='swf/"
+parsedData[4]+"/"+parsedData[3]+"MAN.swf' quality='high' loop='false'  menu='false' bgcolor='#ffffff' WIDTH='250' HEIGHT='200' NAME='Movie1' id='Movie1' TYPE='application/x-shockwave-flash' swLiveConnect='true' PLUGINSPAGE='http://www.macromedia.com/go/getflashplayer'>
</EMBED> 
</OBJECT>"
;

document.getElementById("avatar_woman").innerHTML "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0' WIDTH='250' HEIGHT='200' id='Movie1' name='Movie1'> 
<PARAM NAME='movie'   VALUE='swf/"
+parsedData[4]+"/"+parsedData[3]+"WOMAN.swf'/> 
<PARAM NAME='quality' VALUE='high'/>     
<PARAM NAME='bgcolor' VALUE='#ffffff'/> 
<PARAM NAME='loop' VALUE='false'/>
<PARAM NAME='menu' VALUE='false'/>
<EMBED src='swf/"
+parsedData[4]+"/"+parsedData[3]+"WOMAN.swf' quality='high' loop='false'  menu='false' bgcolor='#ffffff' WIDTH='250' HEIGHT='200' NAME='Movie1' id='Movie1' TYPE='application/x-shockwave-flash' swLiveConnect='true' PLUGINSPAGE='http://www.macromedia.com/go/getflashplayer'>
</EMBED> 
</OBJECT>"

y en html por defecto saldrá:
Código PHP:
// $display_m y $display_w podrá ser inline o none dependiendo del que quiera enseñar
<div style="display: <?=$display_m;?>;" id="avatar_man">

                        <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="250" HEIGHT="200" id="Movie1" name="Movie1">
                        <PARAM NAME="movie"   VALUE="swf/<?=strtolower(trim($Idioma));?>/Victor.swf"/> 
                        <PARAM NAME="quality" VALUE="high"/> 
                        <PARAM NAME="bgcolor" VALUE="#ffffff"/> 
                        <PARAM NAME="loop"    VALUE="false"/>
                        <PARAM NAME="menu"    VALUE="false"/>
                        
                        <EMBED src="swf/<?=strtolower(trim($Idioma));?>/Victor.swf" quality="high" loop="false"  menu="false" bgcolor="#ffffff" WIDTH="250" HEIGHT="200" NAME="Movie1" id="Movie1" TYPE="application/x-shockwave-flash" swLiveConnect="true" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
                        </OBJECT>
</div>

<div style="display: <?=$display_w;?>;" id="avatar_woman">
                        <OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="250" HEIGHT="200" id="Movie1" name="Movie1">
                        <PARAM NAME="movie"   VALUE="swf/<?=strtolower(trim($Idioma));?>/Eva.swf"/> 
                        <PARAM NAME="quality" VALUE="high"/> 
                        <PARAM NAME="bgcolor" VALUE="#ffffff"/> 
                        <PARAM NAME="loop"    VALUE="false"/>
                        <PARAM NAME="menu"    VALUE="false"/>
                        
                        <EMBED src="swf/<?=strtolower(trim($Idioma));?>/Eva.swf" quality="high" loop="false"  menu="false" bgcolor="#ffffff" WIDTH="250" HEIGHT="200" NAME="Movie1" id="Movie1" TYPE="application/x-shockwave-flash" swLiveConnect="true" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer"></EMBED>
                        </OBJECT>
</div>
si hago un alert de document.getElementById("avatar_man").innerHTML el código que aparece es el correcto (es decir, el que yo le acabo de poner en la asignación anterior), pero en la web no se carga el flash nuevo que le acabo de indicar ...
y tampoco puedo hacer un refresco de toda la página pq tengo texto que se me perderia (trabajo tb con Ajax).

Alguien sabe que puede pasar, y como puedo solucionarlo??

Muchas graciasssssss
Skaperna
__________________
La sangre son las lágrimas del alma...
  #2 (permalink)  
Antiguo 03/10/2006, 15:11
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
Muchas veces metiendo etiquetas HTML como si fuesen una cadena con innerHTML la cosa no va del todo bien... Eso pasa con muchos tipos de etiquetas pero ignoro si es el caso de EMBELED o no...

innerHTML es un objeto orientado a trabajar con el DOM y en teoría esta definido para poderle poner HTML a lo bestia (esa es su diferencia con innerText) pero de ahí a que los navegadores admitan ese HTML a lo bestia hay bastante...

Para estos casos lo mejor es constuir las etiquetas con DOM como toca. Para ello tenemos distintas funciones que nos permiten ir creando un objeto XML que luego hacer hijo del elemento que quieras.

document.createElement(ETIQUETA);

Nos permite crear las etiquetas que queramos...

Así podríamos definir:

Código:
var HTML;
object=document.createElement("object");
(esto crearia: <OBJECT></OBJECT>)
y luego seguir usandolo para otras etiquetas... por ejemplo los parametros...

Código:
var params=new Array;
params[0]=document.createElement("param");
params[1]=document.createElement("param");
params[2]=document.createElement("param");
params[3]=document.createElement("param");
...
(esto crearia varios:<PARAM></PARAM>...)

embed: sería lo mismo... document.createElement("embed");

para crearle atributos a cada etiqueta necesitarás setAttribute( NOMBRE , VALOR );

Volviendo al object que ya habíamos creado le podemos ir dando sus atributos así:

Código:
object=document.createElement("object");
object.setAttribute("classid", "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" ); 
object.setAttribute("codebase","direccion(el foro no me deja poner el http :P )//download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0")
object.setAttribute("width","250");
object.setAttribute("height","200");
object.setAttribute("id","Movie1");
object.setAttribute("name","Movie1");
(esto crearia:<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="hpetete://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="250" HEIGHT="200" id="Movie1" name="Movie1"></OBJECT>

Luego habría que hacer lo mismo para todos los params y para el embed...
(casi na!!!)

Para terminar sólo nos quedaría conectar los nodos.

Para eso tenemos la función appendChild() que nos deja meter un elemento dentro de otro.

Así meteriamos los params dentro de object

Código:
object.appendChild(param[0]);
object.appendChild(param[1]);
object.appendChild(param[2]);
object.appendChild(param[3]);
...
//y por ultimo
object.appendChild(embed);
(Eso meteria el cada etiqueta dentro de la etiqueta object con lo que quedaría como tu mismo lo has escrito)

Así ya tendríamos bien montado nuestro objeto en DOM y lo conectariamos a nuestro div pero en vez de con el innerHTL lo haríamos con el mismo appendChild que estamabos usando...

Código:
document.getElementById("avatar_man").appendChild(object);
(y por ultimo esto meteria todo el codigo dentro de tu div)

No te hará falta conectar el resto ya que estos estan conectados a object.



De esta forma puede (y solo puede porque a lo mejor flash sólo carga si es iniciado desde un principio por la pagina -- Preguntale al soporte macromedia) que funcione. Lo que es seguro es que el navegador trabajará mas comodo si metes el html de esta forma...

Última edición por ikhuerta; 03/10/2006 a las 15:15 Razón: Editado para poner como queda el HTML tras cada pedazo de codigo.
  #3 (permalink)  
Antiguo 04/10/2006, 23:30
Avatar de B**
B**
 
Fecha de Ingreso: enero-2006
Ubicación: Monterrey,Mexico
Mensajes: 952
Antigüedad: 18 años, 3 meses
Puntos: 3
Yo lo que hago, es poner el swf dentro de un HTML.... entonces en el metodo open, solo llamo a ese html.. y asi de facil.
Código HTML:
ajax.open("POST","swf.html",true);
__________________
-URL= Go PHP5.
-Age=22.
-Learning=PHP,J2EE,Struts,MAMBO,C++,JSON,AJAX,XHTML ,CSS.
  #4 (permalink)  
Antiguo 05/10/2006, 01:09
Avatar de ikhuerta  
Fecha de Ingreso: octubre-2006
Mensajes: 104
Antigüedad: 17 años, 7 meses
Puntos: 0
Estas diciendo que simplemetne por la extensión ya carga bien? o es que rescatas con responseXML ? El responseXML debería ir tb ya que ya tiene forma de objeto pero skaperna no ha llegado a hablar de ajax... no?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 13:00.