There is only XUL (VIII)

Hasta ahora dividiamos un programa XUL en la interfaz en si, creada con XUL; el aspecto de los widgets, definido con CSS y la funcionalidad, programada en Javascript. Sin embargo Javascript no nos permite cosas como acceder al disco duro, de modo que si tuvieramos que limitar la funcionalidad de los programas basados en XUL a lo que podemos hacer con Javascript, estos no tendrían demasiada utilidad.

La solución a este problema nos viene dada en forma de una libreria escrita en código dependiente de la plataforma llamada XPCOM y una capa intermedia entre javascript y esta librería llamada XPConnect, que traduce los objetos XPCOM en objetos Javascript que puedan ser manipulados en nuestro programa.

El problema de esto es que la seguridad de Mozilla dejaría mucho que desear si cualquier script pudiera hacer cosas como borrar los archivos del disco duro. Aquí es donde vemos la utilidad de chrome.

Como ya se comentó la url chrome:// se refiere al directorio chrome dentro del directorio de instalación de Mozilla/Firefox. Solo los scripts que se encuentren en este directorio tienen permiso para utilizar XPConnect, lo cual implica que para usar los objetos de XPCOM necesitamos instalar nuestra aplicación en chrome. Sin embargo no basta simplemente con mover nuestros ficheros a ese directorio, si no que tenemos que añadir una serie de entradas a installed-chrome.txt para que nuestra aplicación sea añadida al ‘registro chrome’ de forma que Mozilla pueda resolver las urls chrome:// al directorio en que esta instalada nuestra aplicación.

Lo primero que tenemos que hacer es crear un archivo de tipo rdf llamado contents.rdf que proporcionará información a Mozilla sobre el nombre de la aplicación, el autor, la versión…

<?xml version=”1.0″?>

<RDF:RDF xmlns:RDF=”http://www.w3.org/1999/02/22-rdf-syntax-ns#”
xmlns:chrome=”http://www.mozilla.org/rdf/chrome#”>

<RDF:Seq about=”urn:mozilla:package:root”>
<RDF:li resource=”urn:mozilla:package:caffeine”/>
</RDF:Seq>

<RDF:Description about=”urn:mozilla:package:caffeine”
chrome:displayName=”The Caffeine XPerience”
chrome:author=”Zootropo”
chrome:name=”caffeine”
chrome:extension=”true”/>

</RDF:RDF>

En este ejemplo displayName es el nombre completo para la aplicación; author el autor de la aplicación, name el identificador de la aplicación (como se referirá Mozilla a él, tiene que ser igual que el valor después de urn:mozilla:package:) y extension indica si la aplicación es una extensión, de forma que se mostrará en la lista de extensiones de Mozilla en el caso de que sea true (cierto).

Una vez creado nuestro fichero contents.rdf lo copiamos a la carpeta de nuestra aplicación. Editemos ahora el fichero installed-chrome.txt que se encuentra dentro del directorio chrome, teniendo en cuenta cerrar antes el navegador, para registrar nuestra aplicación de forma que Mozilla sepa donde encontrarla. Al final del fichero añadimos por ejemplo para el caso de que el directorio de la aplicación sea caffeine/content/caffeine/ dentro del directorio chrome:

content,install,url,resource:/chrome/caffeine/content/caffeine/

Solo queda borrar el fichero chrome.rdf que contiene la información sobre las extensiones registradas en chrome para que vuelva a crearse cuando ejecutemos Mozilla/Firefox y tenga en cuenta nuestra aplicación. La información de cada una de las aplicaciones la recolectará basándose en installed-chrome.txt para encontrarla y en el contents.rdf que creamos para procesar el contenido de nuestra aplicación.

Ahora deberíamos ser capaces de poder ejecutar cualquier archivo xul de nuestra aplicación (y por añadidura referirnos a cualquier archivo de nuestra aplicación) usando una url chrome de la forma:

chrome://id-aplicacion/content/archivo.xul

Por ejemplo para abrir el archivo foo.xul de la aplicación con id caffeine podríamos simplemente escribir chrome://caffeine/content/foo.xul

Comentarios
  1. alicia

    Pero si borras el fichero content.rdf luego cuano vuelvas arrancar mozilla como lo va ha encontrar??

    Responder

  2. lo que tienes que borrar es chrome.rdf. de ese modo firefox buscará las extensiones de nuevo e incluirá la tuya

    Responder

  3. Pedro Chacin

    Saludos, he seguido sus indicaciones y las de 2 libros acerca de la instalación. He revisado letra a letra a ver si habia escrito algo malo, lo he probado con firefox y mozilla 1.7.12 y no hay manera que me reconozca la aplicación que por lo demas es casi un hola mundo. He creado inclusive la estructura con content, skin y locale. Mozilla sigue diciendo que no encuentra el archivo cuando coloco la dirección tipo: chrome://miaplicacion/content/ por decir un ejemplo. Que será? quiero programar con xul pero estas cosas decepcionan un poco. Gracias de antemano.

    Responder

  4. You

    ¿Hay algún sitio en el que pongan un ejemplo sencillo de XPCOM?

    Responder

  5. Ytsejam

    Saludos, muy bueno el tutorial lo he realizado desde el principio, pero en este capitulo dices que debo modificar el archivo installed-chrome.txt que se encuentra dentro del directorio chrome, pero en mi caso no existe tal archivo dentro del directorio chrome (ni en ningun otro directorio) con ese nombre, la pregunta es debo crearlo desde cero? o es posible que se llame distinto?.. Gracias!!

    Responder

Deja un comentario