Usando el marcado correcto para llamar a los plugins

Este artículo habla de cómo llamar correctamente a un plugin usando HTML. Habla de los elementos object y embed y muestra detalles sobre cómo llamar a aplicaciones Java con HTML en aplicaciones web.

El elemento <object>: Estándares W3C y los navegadores

El elemento object es parte de la especificación HTML 4.01, y es el mecanismo recomendado para llamar a los plugins. Su uso esta condicionado a unas pocas advertencias de las que esta sección habla.

Tradicionalmente, el elemento object ha sido usando de forma diferente por Microsoft Internet Explorer y los navegadores basados en Mozilla como Netscape 7. En IE, el elemento object es usado para llamar a un plugin creado con la arquitectura ActiveX. Aquí vemos un ejemplo de este tipo de uso por parte de IE:

<!-- IE ONLY CODE -->
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" 
width="366" height="142" id="myFlash">
    <param name="movie" value="javascript-to-flash.swf" />
    <param name="quality" value="high" />
    <param name="swliveconnect" value="true" />
</object>

En el ejemplo de arriba, el atributo classid que va junto al elemento object apunta a un URN "clsid:" seguido de un único identificador de un control ActiveX (en el ejemplo de arriba, la cadena que comienza por "D27..."). Esto es, de hecho, el identificador único del plugin de Macromedia's Flash, y los desarrolladores se supone que conocen esos identificadores únicos para llamar al componente de su elección. El atributo codebase usado arriba apunta a la localización donde está el archivo CAB que contiene el control del ActiveX. En este contexto, el atributo codebase se usa como mecanismo de obtención (es decir, una forma de obtener el controlador si no esta presente). Si el control de ActiveX de Flash no está instalado, IE irá entonces a la URL indicada en el atributo codebase y obtendrá el control de ActiveX. Los elementos param adicionales (que son "hijos" del elemento object) especifican los parámetros de configuración para el plugin de Flash. Por ejemplo, param name="movie" indica al plugin de Flash la localización del archivo SWF para empezar a reproducirlo.

Con la salida de Netscape 7.1, este tipo de uso de elementos object de ActiveX está soportado con el uso del Microsoft® Windows Media Player. Sólo el Windows Media Player está soportado como control de ActiveX en Netscape 7.1. Los detalles se indican en otro artículo.

Navegadores como Netscape 7 no renderizarán el plugin Flash si se usa el marcado de arriba, porque Netscape 7 no soporta llamadas a componentes ActiveX o basados en ActiveX, con la excepción del Windows Media Player en Netscape 7.1. Los navegadores basados en Mozilla soportan la arquitectura de plugin de Netscape, los cuales no estan basados en COM como el ActiveX (y por ello, no son llamados vía identificador único) sino basados en el tipo MIME. Los navegadores basados en Mozilla suportan el uso del elemento object junto con el tipo MIME. A continuación se muestra un ejemplo de este uso, una vez más para el plugin de Macromedia Flash:

<object type="application/x-shockwave-flash" data="javascript-to-flash.swf" 
width="366" height="142" id="myFlash">
    <param name="movie" value="javascript-to-flash.swf" />
    <param name="quality" value="high" />
    <param name="swliveconnect" value="true" />
    <p>You need Flash -- get the latest version from 
    <a href= "http://www.macromedia.com/downloads/">here.</a></p>
</object>

En el ejemplo anterior, application/x-shockwave-flash es el tipo MIME de Flash e invocará la arquitectura Flash específica de Netscape en navegadores basados en Mozilla. Los punteros de atributos que apuntan al fichero SWF a ejecutar, y los parámetros de configuración (los elementos param) son ambos usados de una forma consistente por IE y por los navegadores basados en Mozilla como Netscape 7. De hecho, lo visto anteriormente también funcionará para IE, que interpreta las invocaciones de tipo MIME para ciertos tipos MIME como Flash además de las invocaciones del estilo ActiveX classid.

Debido a que el uso de los tipos MIME para Flash funcionará tanto para IE como para Netscape 7, se puede usar el código anterior el plugin de Flash tanto en IE como en Netscape 7. Sin embargo, hay algunas advertencias que los desarrolladores deben tener en cuenta cuando usen el elemento object en navegadores basados en Mozilla como es Netscape 7 y en IE:

Advertencias

  • Si se usa un único elemento object para ambos navegadores (como en el ejemplo anterior), no será posible facilitar un mecanismo de obtención multiplataforma para descargas en flujo. No se puede usar el atributo codebase para enlazarlo a un fichero CAB firmado para el componente ActiveX ya que no funcionará en los navegadores basados en Mozilla tales como Netscape 7. Y lo que es más importante, el uso que IE hace del atributo codebase como mecanismo de obtención en sí no es estrictamente correcto conforme la especificación HTML 4.01, la cual dice que el atributo codebase debería ser usado para cualificar URNs referenciadas por los atributos data, archivo y classid. Los futuros navegadores de Netscape basados en el código fuente de Mozilla permitirán el uso del elemento especial param para especificar de dónde obtener los plugins que no estén instalados, pero esta característica no está disponible en Netscape 7 sino que está siendo discutida en Mozilla bug 167601.
  • IE no muestra correctamente los elementos object anidados de acuerdo a la especificación HTML 4.01. Conforme a la especificación, se pueden anidar elementos y los navegadores deberían detenerse cuando encuentren un elemento que puedan visualizar y sino, seguir buscando en los niveles más internos hasta encontrar alguno. IE lo muestra todo, como si estuviera puesto en fila y no anidado. De este modo IE en el siguiente ejemplo, en lugar de pararse en el control ActiveX mostrará la animación dos veces ya que reconoce el tipo MIME para Flash:
<!-- Usage Will Not Work As Intended -->
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0" 
width="366" height="142" id="myFlash">
    <param name="movie" value="javascript-to-flash.swf" />
    <param name="quality" value="high" />
    <param name="swliveconnect" value="true" />

	<object type="application/x-shockwave-flash" data="javascript-to-flash.swf"
	 width="366" height="142" id="myFlashNSCP">
		<param name="movie" value="javascript-to-flash.swf" />
    		<param name="quality" value="high" />
    		<param name="swliveconnect" value="true" />
		<p>You need Flash -- get the latest version from
		 <a href="http://www.macromedia.com/downloads/">
		here.</a></p>
	</object>

</object>
  • Los diseñadores Web tienen que especificar un mecanismo de obtención en los navegadores basados en Mozilla (el navegador no descargará automáticamente los plugins no instalados si no se especifica de dónde descargarlos a través del atributo codebase. Si no se especifica ningún atributo codebase y el plugin no está instalado, el navegador mostrará sólo el texto alternativo más interno. Sino, se intentará descargar el plugin que falta a través del servicio Netscape Plugin Finder. Este comportamiento es correcto de acuerdo a la especificación HTML 4.01 aunque obliga a los diseñadores web a especificar diligentemente mecanismos de obtención. Como mínimo, los diseñadores Web tendrán que anidar un texto alternativo dentro de sus elementos <object> diciéndole a los usuarios dónde pueden obtener el componente que falta. Añadir una conveniente capa adicional de la forma de recuperación automática es el tema de una discusión en el código abierto de Mozilla.
  • Algunos plugins no entienden parte de los elementos param que su documentación sugiere deberían ser configurados en los navegadores basados en Mozilla. Un ejemplo son las versiones del reproductor de Macromedia Flash hasta Flash Player 6 r.47, el cual no comprende el elemento parámetro <param name="movie" value="animation.swf">, que se supone dice al reproductor Flash qué animación debería empezar a reproducir. Para que funcione, se anima a los desarrolladores a que usen el atributo data del elemento object: <object type="application/x-shockwave-flash" data="animation.swf"..../>. El hecho de que el reproductor Flash no comprenda este param es un fallo de Macromedia Flash Player del que se habla en la base de datos de fallos.

Recomendaciones

Para superar el inconveniente de no poder anidar elementos object en IE y de no existir el modo de usar simplemente un elemento object de modo multiplataforma (con mecanismos de obtención específicos de la arquitectura), la mejor solución es escribir elementos object dinámicamente basándose en la arquitectura. Por ejemplo, en los navegadores que soportan ActiveX como IE, creando un elemento con un atributo classid y en navegadores que soportan la arquitectura de plugins de Netscape, usando un tipo MIME. A continuación se muestra un ejemplo en JavaScript que ilustra esto:

if (window.ActiveXObject)
{

// browser supports ActiveX
// Create object element with 
// download URL for IE OCX

document.write('<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"');
document.write(' codebase="http://download.macromedia.com');
document.write('/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"');
document.write(' width="366" height="142" id="myFlash">');
document.write(' <param name="movie" value="javascript-to-flash.swf" />');
document.write(' <param name="quality" value="high" />');
document.write(' <param name="swliveconnect" value="true" />');
document.write('<\/object>');

}

else
{

// browser supports Netscape Plugin API

document.write('<object id="myFlash" data="javascript-to-flash.swf"');
document.write(' type="application/x-shockwave-flash"');
document.write(' width="366" height="142">');
document.write('<param name="movie" value="javascript-to-flash.swf" />');
document.write('<param name="quality" value="high" />');
document.write('<param name="swliveconnect" value="true" />');
document.write('<p>You need Flash for this.');  
document.write(' Get the latest version from');
document.write(' <a href="http://www.macromedia.com/downloads">here<\/a>.');
document.write('<\/p>');
document.write('<\/object>'); 

}

Véase también: Flash Satay

El elemento object y Java

Los navegadores basados en Mozilla como Netscape 6.x, Netscape 7 y CompuServe 7 vienen con el plugin para Java que Sun proporciona. Los usuarios que instalen Netscape 6.x o Netscape 7 tienen la opción de instalar o no Java. A diferencia de Netscape Communicator 4.x, Netscape 6.x y 7 que no tienen por defecto una máquina virtual Java -- ellos dependen del plugin de Sun. Durante la época de Netscape Communicator 4.x, Netscape Communications solía desarrollar una máquina virtual Java que soportaba Java 1.5.0 y anterior. Ahora, con Netscape 6 y 7, la máquina virtual Java es un plugin de Sun. Netscape ya no desarrolla o incluye una máquina virtual Java por defecto con el nevegador.

El plugin para Java de Sun puede ser invocado por el elemento object, como cualquier otro plugin. Una vez más, Internet Explorer típicamente invoca el plugin de forma que el elemento object es usado conjuntamente con el atributo classid que apunta a un identificador único ActiveX. Cada versión superior del plugin tiene un identificador único. Este es un ejemplo del tipo de etiqueta que JRE 1.4.1 invocará en IE, usando el identificador único para JRE 1.4.1:

<!-- IE ONLY CODE -->
<object classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
     width="460" height="160"
codebase="http://java.sun.com/products/plugin/autodl/jinstall-1_4_1-windows-i586.cab#version=1,4,1">
     <param...>
     <param...>
</object> 

La invocación anterior no funcionará en navegadores basados en Mozilla como Netscape 7 a causa de la razón vista anteriormente: classid usado conjuntamente con el identificador único hace referencia a una arquitectura (ActiveX) que el código de Mozilla (y, por lo tanto, Netscape 7) no soporta. Puedes invocar el plugin de Java para Netscape 7 y otros navegadores basados en Mozilla usando el tipo MIME para Java apropiado. Aquí se muestra un ejemplo:

<object type="application/x-java-applet;jpi-version=1.4.1_01"
width="460" height="160">
	<param name="code" value="Animator.class" />
	<param name="imagesource" value="images/Beans" />
	<param name="backgroundcolor" value="0xc0c0c0" />
	<param name="endimage" value="10" />
	<param name="soundsource" value="audio">
	<param name="soundtrack" value="spacemusic.au" />
	<param name="sounds" value="1.au|2.au|3.au|4.au|5.au|6.au|7.au|8.au|9.au|0.au" />
	<param name="pause" value="200" />
	<p>You need the Java Plugin.
         Get it from <a href="http://java.sun.com/products/plugin/index.html">here.</a></p>
</object>

El código anterior menciona una versión específica de un tipo MIME, y si el navegador basado en Mozilla como Netscape 7 no tiene instalado JRE 1.4.1_01, el texto alterno es mostrado. No es necesario siempre dar una versión específica de un tipo MIME. Si no te estás aprovechando de las características específicas de alguna versión concreta, un tipo MIME más genérico como application/x-java-vm funcionará igual de bien. Los parámetros de configuración para el applet, incluyendo la clase que contiene el punto de entrada inicial (Animator.class, referenciado por el elemento param), son específicos en muchos elementos param.

Los navegadores basados en Mozilla como Netscape 7 también permiten el uso de un atributo especial classid. Este es el especial classid "java:". Aquí vemos un ejemplo usando este método de invocación:

<object classid="java:NervousText.class" width="534" height="50">
	<param name="text" value="Java 2 SDK, Standard Edition v1.4" />
	<p>You need the Java Plugin.
	   Get it from
	   <a href="http://java.sun.com/products/plugin/index.html">here.
	   </a>
	</p>
</object>

el classid "java:" te permite referenciar la clase que proporciona el punto de entrada inicial. El resto de los parámetros de configuración funcionan gracias a los elementos param.

Applet, la elección típica

El elemento applet continúa siendo el más soportado, y sigue siendo la forma más popular de invocar applets en Java. En Netscape 7 y CompuServe 7, el elemento applet invoca directamente el plugin de Java. Aquí vemos un ejemplo:

<applet code="NervousText.class" width="534" height="50">
	<param name="text" value="Java(TM) 2 SDK, Standard Edition v1.4" />
</applet>

El elemento applet ha sido despreciado en la especificación HTML 4.01, pero una ventaja de usarlo es que en navegadores basados en Mozilla como Netscape 7, si has perdido Java, un mecanismo automático de obtención lo reemplaza. El navegador usará el Netscape's Plugin Finder Service para descargar el plugin de Java. La sección References reúne recursos de como usar el elemento applet.

El elemento embed

El elemento embed ha sido usado para invocar plugins desde los primeros tiempos de los navegadores Netscape. Típicamente, el elemento embed es anidado con un elemento object, tal que el otro elemento object invoca un control ActiveX para IE, mientras que el elemento interno embed invoca un plugin de Netscape. Aquí vemos un ejemplo de este uso:

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"
codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=5,0,0,0"
width=366 height=142 id="myFlash">
	<param name="movie" value="javascript_to_flash.swf" />
	<param name="quality" value="high" />
	<param name="swliveconnect" value="true" />
		<embed src="javascript_to_flash.swf" quality="high" width="366" height="142"
    		type="application/x-shockwave-flash"
    		pluginspage="http://www.macromedia.com/downloads/"
    		name="myFlash" swliveconnect="true">
    		</embed> 
</object>

Enlaces a las normas que marcan el uso del elemento embed pueden ser vistas en la sección References. El elemento embed es habitualmente el elemento más ampliamente usado para invocar plugins en navegadores Netscape. Es importante indicar, sin embargo, que el elemento embed no es parte de la especificación HTML 4.01, por lo que no es un estándar W3C. Algunas advertencias que marcan el uso del elemento embed son:

  • No incluyas un atributo name con el elemento object, especialmente si tiene el mismo nombre que el elemento embed. Sin embargo hacerlo también viola el estándar HTML 4.01, algunos generadores de código dan atributos name al elemento object. Navegadores basados en Mozilla no te permitirán el acceso al elemento llamado embed a través de métodos JavaScript DOM 0 si el elemento object tiene el mismo name. Utiliza el atributo id con el elemento object. El atributo id del elemento object puede tener el mismo valor que el atributo name del elemento embed.
  • Verás que el elemento embed permite parámetros de configuración pasados a través de atributos a medida, como swliveconnect="true". Éstos son análogos a los elementos param usados por el elemento object. Plugins de otras compañías requerirán que diferentes parámetros de configuración sean pasados a través del elemento embed, y aprender éstos es aconsejable.

Nótese que el mecanismo de obtención para el elemento embed -- esto es, la forma en como un plugin se obtiene si se ha perdido -- viene a través del atributo pluginspage. Este atributo apunta a una página para coger el plugin si éste no se detecta por el navegador. El atributo pluginurl es otro atributo que puede ser usado, y puede ser usado para apuntar directamente a un archivo XPInstall para una descarga más racionalizada. Para el elemento embed en concreto, estos atributos en Netscape 7 y Mozilla son mandados por la opción Plugin Finder Service. Debajo de Editar | Preferencias | Navegador | Aplicaciones de ayuda es una opción para usar el Plugin Finder Service de Netscape. Si el usuario ha seleccionado Siempre usar Netscape Plugin Finder Service para obtener Plugins entonces si estos atributos son o no especificados no produce ninguna diferencia -- el navegador siempre consultará con el Plugin Finder Service para determinar si tiene un plugin para manejar el tipo MIME perdido. Si esta opción no está marcada, el Plugin Finder Service será usado sólo si el autor de la página web NO especifica cualquiera de estos atributos.

Información del documento original

Referencias

General -- Especificaciones
El elemento <object>
El elemento <embed>
Java
Bugs y futuras direcciones en Netscape y Mozilla

Categorías

Interwiki, vínculos a otros idiomas

Etiquetas y colaboradores del documento

 Colaboradores en esta página: Mgjbot, Superruzafa, Trace2x, Fedora-core, Jorolo, Nukeador
 Última actualización por: Mgjbot,