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="https://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= "https://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 atributocodebase
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 atributocodebase
como mecanismo de obtención en sí no es estrictamente correcto conforme la especificación HTML 4.01, la cual dice que el atributocodebase
debería ser usado para cualificar URNs referenciadas por los atributosdata
,archivo
yclassid
. Los futuros navegadores de Netscape basados en el código fuente de Mozilla permitirán el uso del elemento especialparam
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="https://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="https://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 atributocodebase
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 atributodata
del elementoobject
:<object type="application/x-shockwave-flash" data="animation.swf"..../>
. El hecho de que el reproductor Flash no comprenda esteparam
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="https://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="https://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="https://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="https://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="https://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="https://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="https://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 elementoobject
, especialmente si tiene el mismo nombre que el elementoembed
. Sin embargo hacerlo también viola el estándar HTML 4.01, algunos generadores de código dan atributosname
al elementoobject
. Navegadores basados en Mozilla no te permitirán el acceso al elemento llamadoembed
a través de métodos JavaScript DOM 0 si el elementoobject
tiene el mismoname
. Utiliza el atributoid
con el elementoobject
. El atributoid
del elementoobject
puede tener el mismo valor que el atributoname
del elementoembed
. - Verás que el elemento
embed
permite parámetros de configuración pasados a través de atributos a medida, comoswliveconnect="true"
. Éstos son análogos a los elementosparam
usados por el elementoobject
. Plugins de otras compañías requerirán que diferentes parámetros de configuración sean pasados a través del elementoembed
, 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
- Autor(es): Arun K. Ranganathan, Netscape Communications
- Última actualización: 14. Nov 2002
- Información de Copyright: Copyright © 2001-2003 Netscape. Todos los derechos reservados.
- Link: https://devedge-temp.mozilla.org/view.../index_en.html
Referencias
General -- Especificaciones
El elemento <object>
El elemento <embed>
Java
- HTML 4.01 Applet Definition (Deprecated)
- Java Plugin Homepage
- Sun Documentation on OBJECT, EMBED, and APPLET and Different Plugin Versions
- Sun Demonstration of Web Pages using Applet Element
- Sun Demonstration of Web Pages Using OBJECT/EMBED Elements
Bugs y futuras direcciones en Netscape y Mozilla
- Windows Media in Netscape Netscape 7.1 and the Windows Media ActiveX control
- Flash Currently Doesn't Support param To Launch Animation.
- Plan to Support A "Special" param as a Future Obtainment Mechanism for Streamlined Downloads
- Plan to Support Plugin Finder Service for the object Element When No Other Obtainment Mechanism is Specified.
Categorías
Interwiki, vínculos a otros idiomas