Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/10/2006, 15:11
Avatar de ikhuerta
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.