Funciones que hacen que Firefox cargue el plugin Java

Por , 27 febrero 2009 12:16

El titulo del articulo original es “Here comes the sun” y lleva el subtexto: “Propiedades mágicas hacen que Firefox cargue de manera síncrona el plugin de java”. A continuación traduzco la nota:

Aqui hay un pequeño problema para desarrolladores web. Hay unas cuantas propiedades “mágicas” en el interfaz DOMWindow de Mozilla para soportar LiveConnect que lanzan el plugin de Java y todo lo que eso conlleva (en el caso de plugins modernos, lanzar java.exe como subproceso). Solo es necesario buscar estas propiedades en el objeto window.

Por ejemplo, veamos esta pagina de ejemplo:

<!DOCTYPE html>
<html>
<head>
<script type=”text/javascript”>
function sun() {}
</script>
</head>
<body>
</body>
</html>

Inocua, no? En realidad, no. Resulta que Firefox trata window.sun como una propiedad mágica de LiveConnect (Lo probé con Firefox 3.0.6 en Windows). Que es LiveConnect? Fue introducido en Netscape 4 para permitir controlar plugins a través de scripts. Acceder a cualquier propiedad mágica de LiveConnect lanzara el plugin de Java, incluso aunque tu codigo no tenga nada que ver con Java. Y usar el plugin de Java implica cargar la JVM. Ah! Y he mencionado que todo esto ocurrirá de forma síncrona? Y que Firefox dejara de cargar la pagina y se quedara esperando a que la JVM cargue? Y todo eso simplemente por acceder a la propiedad window.sun.

“Pero, pero, pero…” Te oigo tartamudear. “No estoy accediendo a la propiedad window.sun!”. Si, si lo estas haciendo. Declarar una función global es como asignar una propiedad al objeto window (el valor de la propiedad es la función en si). Y para asignar esa propiedad, Firefox la busca antes de reasignarla. Y cuando la busca… carga la JVM. De forma síncrona.

La lista de estas propiedades mágicas de LiveConnect que matan el rendimiento está enterrada dentro de la documentación del código fuente de Mozilla. Son las siguientes:

* java
* Packages
* netscape
* sun
* JavaClass
* JavaArray
* JavaMember

En otras palabras, no defináis una función a nivel de ventana que se llame sun(). Matara el rendimiento de tu pagina porque al menos un navegador moderno pensara que quieres usar Java, gracias a una “característica” que invento Netscape en 1997.

Entrada publicada originalmente en Barrapunto

Deja un Mensaje

Panorama Theme by Themocracy