Estructura XUL

  • Enlace amigable (slug) de la revisión: Tutorial_de_XUL/Estructura_XUL
  • Título de la revisión: Estructura XUL
  • Id de la revisión: 169637
  • Creada:
  • Creador: Luarmr
  • ¿Es la revisión actual? No
  • Comentario /* Cómo se procesa XUL */

Contenido de la revisión

{{template.AnteriorSiguiente("Tutorial de XUL:Introducción", "Tutorial de XUL:La URL chrome")}}


{{wiki.template('Traducción', [ "inglés", "XUL_Tutorial:XUL Structure", "en" ])}}


Comenzaremos viendo cómo se procesa XUL por parte de Mozilla

Cómo se procesa XUL

En mozilla, XUL se procesa en forma similar al procesamiento de HTML y otros tipos de contenido. Cuando el usuario digita la URL de una página HTML en el campo dirección del navegador, éste busca el sitio web y descarga su contenido. El motor de renderizado de Mozilla toma el contenido en el formato HTML y lo transforma en un árbol de documento. Este árbol se convierte en un conjunto de objetos que pueden mostrarse en la pantalla. CSS, imágenes y otras tecnologías son usadas para controlar la presentación. El procesamiento de XUL es muy similar.

De hecho, en Mozilla, todos los tipos de documento, sin importar si son HTML, XUL o aún SVG son procesados por el mismo código. Esto significa que las mismas propiedades CSS pueden usarse para definir el estilo tanto del HTML como de XUL, y muchas de las características pueden compartirse entre ambos. Sin embargo, hay características que son específicas del HTML como son los formularios, y otras que son específicas de XUL como son los overlays (revestimientos). Ya que XUL y HTML se procesan de la misma forma, se pueden cargar desde el sistema de archivos local del usuario, desde una página web, desde una extensión del navegador o desde una aplicación XULRunner.

El contenido de fuentes remotas, sin importar si es HTML, XUL o cualquier otro tipo de documento, está limitado en la clase de operaciones que pueden realizar, por razones de seguridad. Por este motivo, Mozilla proporciona un método para instalar contenido en forma local y registrar los archivos instalados para que formen parte del sistema chrome. Esto permite usar una URL especial llamada la URL chrome. Al acceder a un archivo usando la URL chrome, éstos reciben privilegios para acceder archivos locales, preferencias, marcadores de página y ejecutar otras operaciones privilegiadas. Obviamente, las páginas web no obtienen estos privilegios, a menos que estén firmadas con un certificado digital y el usuario de el permiso para ejecutar estas operaciones.

Este registro en el paquete chrome es la forma cómo las extensiones de Firefox pueden añadir características al navegador. Las extensiones son pequeños paquetes con archivos XUL, Javascript, hojas de estilo e imágenes empaquetados en un sólo archivo. Este archivo puede crearse usando una utilidad ZIP. Cuando el usuario descarga la extensión, ésta es instalada en su máquina. La extensión se ensambla en el navegador usando una característica especial de XUL llamada overlay (revestimiento), la cual permite que se combinen el XUL de la extensión y el XUL del navegador. Para el usuario, puede parecer que la extensión ha modificado al navegador, pero en realidad el código está separado y la extensión puede desinstalarse fácilmente. Por supuesto, no es necesario que los paquetes registrados usen revestimientos. Si no los usan, no pueden accederse desde la interfaz del navegador, pero el usuario aún puede accederlos por medio de la URL chrome, si sabe cuál es.

Las aplicaciones XUL (que no necesiten del navegador) pueden incluir código XUL de la misma forma, pero este código se incluirá como parte de la instalación, en lugar de tener que instalarse en forma separada como una extensión. Sin embargo, este código XUL debe ser registrado en el sistema chrome de tal forma que las aplicaciones puedan mostrar la interfaz.

Vale la pena anotar que el navegador Mozilla realmente es un conjunto de paquetes que contienen archivos XUL, JavaScript y hojas de estilo. Estos paquetes son accedidos usando una URL chrome y tienen privilegios ampliados y trabajan como cualquier otro paquete. Por supuesto, el navegador es más grande y más sofisticado que la mayoría de las extensiones. Firefox, Thunderbird y muchos otros componentes también estan escritos en XUL y se pueden acceder usando la URL chrome. Ud. puede examinar estos paquetes mirando el directorio chrome dónde Firefox o cualquier otra aplicación XUL está instalada.

La URL chrome siempre comienza por 'chrome://'. De la misma forma que la URL 'http://' hace referencia a sitios web remotos accedidos por medio de HTTP y la URL 'file://' hace referencia a archivos locales, la URL chrome hace referencia a los paquetes y extensiones instaladas. En la próxima sección veremos en detalle la sintaxis de la URL chrome. Es importante anotar que si se accede a un contenido a través de una URL chrome, éste gana los privilegios ampliados que se han mencionado anteriormente y que otras clases de URL no tienen. Por ejemplo, una URL HTTP no tiene ningún privilegio especial, y ocurrirá un error si la página web intenta leer un archivo local. Sin embargo, un archivo cargado por medio de una URL chrome podrá leer archivos sin restricciones.

Esta diferenciación es importante. Significa que hay ciertas cosas que el contenido de las páginas web no pueden hacer, tales como leer los marcadores de página del usuario. Esta diferenciación no está basada en la clase de contenido a ser mostrado, sólo en el tipo de URL empleada. Tanto el HTML como el XUL colocados en un sitio web no tienen permisos adicionales, sin embargo si el HTML o el XUL son cargados por medio de una URL chrome tendrán permisos ampliados.

Si Ud. va a usar XUL en un sitio web, debe colocar el archivo XUL en el sitio web tal como lo haría con un archivo HTML, y luego cargar su URL en el navegador. Debe asegurarse que el servidor web esté configurado para enviar los archivos XUL con el tipo de contenido 'application/vnd.mozilla.xul+xml'. Este tipo de contenido es la forma que tiene Mozilla para diferenciar entre HTML y XUL. Mozilla no usa la extensión del archivo, a menos que esté leyendo archivos del disco, o al hacer doble-click en el archivo en su administrador de archivos. Recuerde que el XUL remoto tendrá restricciones significativas sobre lo que podrá hacer.

Mozilla emplea una clase totalmente diferente de objeto documento para el HTML y el XUL, aunque compartan mucha funcionalidad. En Mozilla existen tres clases principales de documentos: HTML, XML y XUL. Naturalmente, el documento HTML se usa para los documentos HTML, el documento XUL se utiliza en los documentos XUL y el documento XML se emplea para otros tipos de documentos XML. Ya que el formato XUL también es XML, el documento XUL es una subclase del documento XML que es más genérico. Existen diferencias sutiles de funcionalidad. Por ejemplo, mientras los controles de un formulario en una página HTML se pueden acceder por medio de la propiedad 'document.forms', esta propiedad no está disponible en los documentos XUL ya que XUL no tiene formularios en el sentido en que HTML los tiene. De otra parte, características específicas de XUL como los revestimientos y las plantillas sólo están disponibles en los documentos XUL.

Esta diferenciación entre documentos es importante. Es posible usar muchas características de XUL en documentos HTML o XML ya que no son específicas al tipo de documento, sin embargo, otras características requieren el tipo adecuado de documento. Por ejemplo, se pueden usar los tipos de disposición de XUL en otros documentos ya que no dependen del tipo de documento XUL para funcionar.

Para resumir los puntos expuestos anteriormente:

  • Mozilla muestra tanto el HTML como el XUL usando la misma máquina de renderizado y emplea CSS para especificar su presentación.
  • XUL puede cargarse desde un sitio remoto, desde el sistema de archivos local, o ser instalado con un paquete y ser accedido usando una URL chrome. Esto es lo que hacen las extensiones del navegador.
  • Las URL chrome pueden usarse para acceder paquetes instalados y abrirlos con privilegios ampliados.
  • HTML, XML y XUL tienen diferentes tipos de documentos. Algunas características pueden usarse en cualquier clase de documento, mientras que otras son específicas para una clase de documento.

En las próximas secciones describiremos la estructura básica de un paquete chrome que será instalado dentro de Mozilla. Sin embargo, si desea comenzar a construir una aplicación simple, puede saltar a Creando una ventana y dejarlas para después.

Organización del paquete

Mozilla está organizado de tal forma que te permite tener tantos componentes pre-instalados como quieras. Cada extension es, además, un componente con un chrome URL distinto. Además tendrá un componente para cada tema o locale instalado. Cada uno de estos componentes, o paquetes, está compuesto de un conjunto de ficheros que describen la interfaz de usuario para cada uno. Por ejemplo, el componente de mensajería tendrá descripciones de la ventana de listado de mensajes de correo, la ventana de composición y los cuadros de la libreta de direcciones.

Los paquetes que vienen con Mozilla están localizados en la carpeta chrome, que puedes encontrar en el directorio donde instalaste Mozilla. La carpeta chrome es donde encontrarás todos estos archivos que describen la interfaz de usuario para el navegador Mozilla, el cliente de correo y para otras aplicaciones. Habitualmente pondrás todos los archivos XUL para una aplicación en esta carpeta, excepto para las extensiones, que serán instaladas en la carpeta de extensiones de un usuario concreto. El simple hecho de copiar un archivo XUL en la carpeta 'chrome' no proporcionará al archivo ningún permiso extra ni será accesible a través de chrome URL. Para conseguir estos privilegios extra, tendrás que crear un archivo manifest y ponerlo en la carpeta chrome. Este archivo es fácil de crear, y habitualmente sólo contiene un par de líneas de código. Se usa para enlazar un chrome URL a un archivo o ruta de una carpeta en el disco donde los archivos XUL estan situados. Detalles de como crear este archivo serán vistos en la siguiente sección.

La única forma de crear contenido que pueda ser accedido a través de chrome URL es creando un paquete como se describe en las siguientes secciones. Esta carpeta se denomina provablemente 'chrome' porqué parece ser un nombre conveniente para usarse para el directorio donde se mantienen los paquetes chrome que se incluyen con Mozilla.

Para favorecer la confusión, hay otros dos sitios donde la palabra chrome debe aparecer. El primero es el argumento '-chrome', y el segundo es el modificador chrome para la función 'window.open'. Ninguna de estas características otorga privilegios extra; en cambio son usadas para abrir una nueva ventana arriba del todo sin el menú o la barra de herramientas del navegador. Habitualmente se usará esta característica en aplicaciones XUL donde no se quiera que aparezca las diferentes barras del navegador alrededor de tus cuadros de diálogo.

Los archivos para un paquete son normalmente unidos en un simple archivo JAR. Un archivo JAR debe ser creado y examinado usando una aplicación ZIP. Por ejemplo, puedes abrir un archivo JAR en la carpeta chrome de Mozilla para ver la estructura básica de un paquete. Aunque es normal unir los archivos en un archivo JAR, los paquetes deben ser también accedidos de forma expandida en un directorio. Aunque habitualmente no distribuirás un paquete de esta forma, es práctico durante su desarrollo, ya que puedes editar el archivo directamente para después recargarlo sin tener que volver a empaquetar o reinstalar los archivos.

Habitualmente hay tres partes distintas en un paquete chrome, aunque son opcionales. Cada parte está almacenada en una carpeta distinta. Estas tres partes son el contenido, la piel (skin) y el locale, explicados más abajo. Un paquete particular debe proporcionar una o más pieles (skins) y locales, pero un usuario puede reemplazarlos con los suyos propios. Además, el paquete debe incluir varias aplicaciones distintas cada una accesible a través de diferentes chrome URLs. El sistema de paquetes es suficientemente flexible por lo que puedes incluir todas las partes que necesites y permitir que otras partes, como el texto para diferentes idiomas, sean descargadas de forma separada.

Los tres tipos de paquetes chrome son:

  • Contenido - Ventanas y scripts
    Las declaraciones de las ventanas y los elementos de la interfaz de usuario contenidos con ellos. Se almacenan en archivos XUL, que tienen extension xul. Un paquete de contenido puede tener múltiples archivos XUL, pero la ventana principal debe tener un nombre de archivo que es el mismo que el nombre del paquete. Por ejemplo, el paquete editor tendrá un archivo que se llamará editor.xul. Los scripts están situados en archivos separados junto a los archivos XUL.
  • Piel (Skin) - Capas del estilo, imágenes y otros archivos específicos del tema
    Las capas del estilo describen detalles del aspecto de una ventana. Se almacenan de forma separada a los archivos XUL para facilitar modificar la piel (skin o tema) de una aplicación. Algunas imágenes usadas también se almacenan aquí.
  • Locale - Archivos específicos locale
    Todo el texto que se muestra en una ventana se almacena de forma separada. De esta forma, un usuario puede tener un conjunto para su propio idioma.

Paquetes de contenido

El nombre de un archivo JAR debe describir que contiene, pero no se puede asegurar que contiene sino se ha visto su contenido. Vamos a usar el paquete del navegador incluído con Firefox a modo de ejemplo. Si extraemos los archivos de browser.jar, nos encontraremos con una jerarquía de directorios similar a la que se muestra a continuación:

content
   browser
      browser.xul
      browser.js
      -- other mail XUL and JS files goes here --
      bookmarks
         -- bookmarks files go here --
      preferences
         -- preferences files go here --
.
.
.

Ésta es fácilmente reconocible como un paquete de contenidos, ya que la carpeta más superior se llama 'content'. Para pieles (skins), esta carpeta normalmente será denominada como 'skin' y para locales, se le llamará 'locale'. Este esquema de nombres no es necesario pero es una práctica habitual para hacer más claras las partes de un paquete. Algunos paquetes deben incluir una sección de contenidos, una piel (skin) y un locale. En este caso, nos encontraremos una subcarpeta para cada tipo. Por ejemplo, Chatzilla está distribuído de esta forma.

La carpeta content/browser contiene un número de archivos con extensiones xul y js. Los archivos XUL son los que tienen la extension xul. Los archivos con extensiones js son archivos JavaScript que contienen scripts que se encargan de la funcionalidad de una ventana. Muchos archivos XUL tienen un archivo script asociado con ellos, y muchos deben tener más de uno.

En el listado superior, dos archivos han sido vistos. De hecho hay otros, pero para simplificar no serán vistos. El archivo browser.xul es el archivo XUL que describe la ventana principal del navegador. La ventana principal para un paquete de contenido debe tener el mismo nombre que el paquete con una extensión xul. En este caso, el nombre del paquete es 'browser', por eso esperaremos encontrarnos con 'browser.xul'. Algunos de los otros archivos XUL describen ventanas distintas. Por ejemplo, el archivo pageInfo.xul describe el cuadro de información de la página.

Muchos paquetes incluirán un archivo contents.rdf que describe el paquete, su autor y el revestimiento que usa. Sin embargo, este archivo está obsoleto y ha sido reemplazado con un mecanismo más simple. Este nuevo método es el archivo manifest mencionado anteriormente, y encontraremos estos archivos con la extensión .manifest en el directorio chrome. Por ejemplo, browser.manifest describe el paquete del navegador.

Varias subcarpetas, como son marcadores y preferencias, describen secciones adicionales del navegador. Están ubicadas en diferentes carpetas sólo para mantener los archivos más organizados.

Pieles (Skins) o Temas

Al código subyacente de Mozilla se le llama pieles (skins), aunque a la interfaz de usuario se le llama temas, pero ambos se refieren a la misma cosa. El archivo classic.jar describe el tema por defecto que viene con Firefox. La estructura es similar a los paquetes de contenido. Por ejemplo, examinando classic.jar:

skin
   classic
      browser
         -- browser skin files go here --
      global
         contents.rdf
         -- global skin files go here --.
.
.

Nuevamente, esta estructura de carpetas no es necesaria y es usada por comodidad. Realmente puedes colocar todos los archivos en una carpeta arriba del todo y no usar subcarpetas. Sin embargo, para aplicaciones mayores, las subcarpetas son usadas para separar los diferentes componentes. En el ejemplo anterior, una carpeta existe para los archivos del tema para el navegador y otra para los archivos del tema global. La carpeta global contiene archivos de la piel (skin) que son comunes a todos los paquetes. Estos archivos se aplicarán a todos los componentes y serán incluídos para tus aplicaciones autónomas. La parte global define el aspecto de todos los chismes comunes XUL, mientras que las otras carpetas contienen archivos que son específicos de estas aplicaciones. Firefox incluye tanto los archivos del tema global como los del navegador en un archivo, pero ambos pueden ser incluídos por separado.

Una piel (skin) se compone de archivos CSS y de un número de imágenes usadas para definir el aspecto y la interfaz. El archivo browser.css es usado por browser.xul y contiene estilos que definen el aspecto de varias partes de la interfaz del navegador. Nuevamente, nótese como el archivo browser.css tiene el mismo nombre que el paquete. Cambiando los archivos CSS, puedes ajustar el aspecto de una ventana sin cambiar su función. De esta forma puedes crear un nuevo tema. La parte XUL continúa igual pero la parte de la piel (el skin) cambia independientemente.

Locales

El archivo en-US.jar describe la información del idioma para cada componente, en este caso para US English. Como las pieles (skins), cada idioma contendrá archivos que especifican texto usado por el paquete pero para un idioma concreto. La estructura locale es similar a las otras, por eso no será explicada aquí.

El texto localizado es almacenado en dos tipos de archivos: archivos DTD y archivos de propiedades. Los archivos DTD tienen una extensión dtd y contienen declaraciones de identidad, una para cada cadena de texto usada en una ventana. Por ejemplo, el archivo browser.dtd contiene declaraciones de identidad para cada comando del menú. Además, los atajos de teclado para cada comando también están definidos, ya que deben de ser diferentes para cada idioma. Los archivos DTD son usados por los archivos XUL por eso, en general, tendrás uno para cada archivo XUL. La parte locale también contiene archivos de propiedades, que son similares, pero son usados por archivos script. El archivo browser.properties contiene algunas cadenas localizadas.

Esta estructura nos permite traducir Mozilla o un componente a un idioma distinto sólo añadiendo un nuevo locale para ese lenguaje. No tienes que cambiar la parte de XUL. Además, otra persona puede proporcionar un paquete separado que aplica una piel (skin) o locale a tu parte de contenido, proporcionando soporte de esta manera a un nuevo tema o idioma sin tener que modificar el paquete original.

Otros paquetes

Hay un paquete especial llamado toolkit (o global). Vimos anteriormente el directorio global para skins (pieles). El archivo toolkit.jar contiene el contenido correspondiente para ello. Contiene algunos diálogos globales y definiciones. Además, define la apariencia por defecto y la funcionalidad de varios widgets XUL comunes como son los cuadros de texto y los botones. Los archivos localizados en la parte global de un paquete skin contienen la apariencia por defecto para todos los elementos de la interfaz XUL. El paquete toolkit es usado por todas las aplicaciones XUL.

Añadiendo un paquete

Mozilla coloca los paquetes incluídos con la instalación en la carpeta chrome. Sin embargo, no es necesario colocarlos aquí. Si tienes otro paquete instalado, puede ser colocado en cualquier parte del disco, siempre que un archivo manifest apunte a él. Es una práctica frecuente colocar los paquetes en la carpeta chrome simplemente por ser conveniente, sin embargo sólo funcionarán correctamente desde otro directorio o desde algún lugar de tu red local. No puedes almacenarlos en un lugar remoto, a no ser que el sitio remoto sea montado a través del sistema de ficheros local.

Hay dos carpetas chrome usadas para las aplicaciones XUL, una está instalada en el mismo sitio donde las aplicaciones están instaladas, y la otra es parte del perfil del usuario. Lo primero permite a los paquetes ser compartidos por todos los usuarios, mientras que lo segundo permite la creación de paquetes sólo por un usuario o grupo específico. Extensiones, cuando son instaladas en una carpeta de extensiones diferente, son también normalmente específicas del usuario. Cualquier archivo manifest situado en cualquier carpeta chrome será examinado para ver que los paquetes instalados.

En la siguiente sección, veremos como referirse a un paquete chrome usando chrome URL.

{{template.AnteriorSiguiente("Tutorial de XUL:Introducción", "Tutorial de XUL:La URL chrome")}} Interwiki Language Links

{{ wiki.languages( { "ja": "ja/XUL_Tutorial/XUL_Structure", "pl": "pl/Pomocnik_XUL/Struktura_XUL" } ) }}

Fuente de la revisión

<p>
{{template.AnteriorSiguiente("Tutorial de XUL:Introducción", "Tutorial de XUL:La URL chrome")}}
</p><p><br>
</p><p>{{wiki.template('Traducción', [ "inglés", "XUL_Tutorial:XUL Structure", "en" ])}}
</p><p><br>
Comenzaremos viendo cómo se procesa XUL por parte de Mozilla
</p>
<h3 name="C.C3.B3mo_se_procesa_XUL"> Cómo se procesa XUL </h3>
<p>En mozilla, XUL se procesa en forma similar al procesamiento de HTML y otros tipos de contenido. Cuando el usuario digita la URL de una página HTML en el campo dirección del navegador, éste busca el sitio web y descarga su contenido. El motor de renderizado de Mozilla toma el contenido en el formato HTML y lo transforma en un árbol de documento. Este árbol se convierte en un conjunto de objetos que pueden mostrarse en la pantalla. CSS, imágenes y otras tecnologías son usadas para controlar la presentación. El procesamiento de XUL es muy similar.
</p><p>De hecho, en Mozilla, todos los tipos de documento, sin importar si son HTML, XUL o aún SVG son procesados por el mismo código. Esto significa que las mismas propiedades CSS pueden usarse para definir el estilo tanto del HTML como de XUL, y muchas de las características pueden compartirse entre ambos. Sin embargo, hay características que son específicas del HTML como son los formularios, y otras que son específicas de XUL como son los <strong>overlays</strong> (revestimientos). Ya que XUL y HTML se procesan de la misma forma, se pueden cargar desde el sistema de archivos local del usuario, desde una página web, desde una extensión del navegador o desde una aplicación XULRunner.
</p><p>El contenido de fuentes remotas, sin importar si es HTML, XUL o cualquier otro tipo de documento, está limitado en la clase de operaciones que pueden realizar, por razones de seguridad. Por este motivo, Mozilla proporciona un método para instalar contenido en forma local y registrar los archivos instalados para que formen parte del sistema chrome. Esto permite usar una URL especial llamada la URL chrome. Al acceder a un archivo usando la URL chrome, éstos reciben privilegios para acceder archivos locales, preferencias, marcadores de página y ejecutar otras operaciones privilegiadas. Obviamente, las páginas web no obtienen estos privilegios, a menos que estén firmadas con un certificado digital y el usuario de el permiso para ejecutar estas operaciones.
</p><p>Este registro en el paquete chrome es la forma cómo las extensiones de Firefox pueden añadir características al navegador. Las extensiones son pequeños paquetes con archivos XUL, Javascript, hojas de estilo e imágenes empaquetados en un sólo archivo. Este archivo puede crearse usando una utilidad ZIP. Cuando el usuario descarga la extensión, ésta es instalada en su máquina. La extensión se ensambla en el navegador usando una característica especial de XUL llamada overlay (revestimiento), la cual permite que se combinen el XUL de la extensión y el XUL del navegador. Para el usuario, puede parecer que la extensión ha modificado al navegador, pero en realidad el código está separado y la extensión puede desinstalarse fácilmente. Por supuesto, no es necesario que los paquetes registrados usen revestimientos. Si no los usan, no pueden accederse desde la interfaz del navegador, pero el usuario aún puede accederlos por medio de la URL chrome, si sabe cuál es.
</p><p>Las aplicaciones XUL (que no necesiten del navegador) pueden incluir código XUL de la misma forma, pero este código se incluirá como parte de la instalación, en lugar de tener que instalarse en forma separada como una extensión. Sin embargo, este código XUL debe ser registrado en el sistema chrome de tal forma que las aplicaciones puedan mostrar la interfaz.
</p><p>Vale la pena anotar que el navegador Mozilla realmente es un conjunto de paquetes que contienen archivos XUL, JavaScript y hojas de estilo. Estos paquetes son accedidos usando una URL chrome y tienen privilegios ampliados y trabajan como cualquier otro paquete. Por supuesto, el navegador es más grande y más sofisticado que la mayoría de las extensiones. Firefox, Thunderbird y muchos otros componentes también estan escritos en XUL y se pueden acceder usando la URL chrome. Ud. puede examinar estos paquetes mirando el directorio chrome dónde Firefox o cualquier otra aplicación XUL está instalada.
</p><p>La URL chrome siempre comienza por 'chrome://'. De la misma forma que la URL <span class="plain">'http://'</span> hace referencia a sitios web remotos accedidos por medio de HTTP y la URL 'file://' hace referencia a archivos locales, la URL chrome hace referencia a los paquetes y extensiones instaladas. En la próxima sección veremos en detalle la sintaxis de la URL chrome. Es importante anotar que si se accede a un contenido a través de una URL chrome, éste gana los privilegios ampliados que se han mencionado anteriormente y que otras clases de URL no tienen. Por ejemplo, una URL HTTP no tiene ningún privilegio especial, y ocurrirá un error si la página web intenta leer un archivo local. Sin embargo, un archivo cargado por medio de una URL chrome podrá leer archivos sin restricciones.
</p><p>Esta diferenciación es importante. Significa que hay ciertas cosas que el contenido de las páginas web no pueden hacer, tales como leer los marcadores de página del usuario. Esta diferenciación no está basada en la clase de contenido a ser mostrado, sólo en el tipo de URL empleada. Tanto el HTML como el XUL colocados en un sitio web no tienen permisos adicionales, sin embargo si el HTML o el XUL son cargados por medio de una URL chrome tendrán permisos ampliados.
</p><p>Si Ud. va a usar XUL en un sitio web, debe colocar el archivo XUL en el sitio web tal como lo haría con un archivo HTML, y luego cargar su URL en el navegador. Debe asegurarse que el servidor web esté configurado para enviar los archivos XUL con el tipo de contenido 'application/vnd.mozilla.xul+xml'. Este tipo de contenido es la forma que tiene Mozilla para diferenciar entre HTML y XUL. Mozilla no usa la extensión del archivo, a menos que esté leyendo archivos del disco, o al hacer doble-click en el archivo en su administrador de archivos. Recuerde que el XUL remoto tendrá restricciones significativas sobre lo que podrá hacer.
</p><p>Mozilla emplea una clase totalmente diferente de objeto documento para el HTML y el XUL, aunque compartan mucha funcionalidad. En Mozilla existen tres clases principales de documentos: HTML, XML y XUL. Naturalmente, el documento HTML se usa para los documentos HTML, el documento XUL se utiliza en los documentos XUL y el documento XML se emplea para otros tipos de documentos XML. Ya que el formato XUL también es XML, el documento XUL es una subclase del documento XML que es más genérico. Existen diferencias sutiles de funcionalidad. Por ejemplo, mientras los controles de un formulario en una página HTML se pueden acceder por medio de la propiedad 'document.forms', esta propiedad no está disponible en los documentos XUL ya que XUL no tiene formularios en el sentido en que HTML los tiene. De otra parte, características específicas de XUL como los revestimientos y las plantillas sólo están disponibles en los documentos XUL.
</p><p>Esta diferenciación entre documentos es importante. Es posible usar muchas características de XUL en documentos HTML o XML ya que no son específicas al tipo de documento, sin embargo, otras características requieren el tipo adecuado de documento. Por ejemplo, se pueden usar los tipos de disposición de XUL en otros documentos ya que no dependen del tipo de documento XUL para funcionar.
</p><p>Para resumir los puntos expuestos anteriormente:
</p>
<ul><li> Mozilla muestra tanto el HTML como el XUL usando la misma máquina de renderizado y emplea CSS para especificar su presentación.
</li><li> XUL puede cargarse desde un sitio remoto, desde el sistema de archivos local, o ser instalado con un paquete y ser accedido usando una URL chrome. Esto es lo que hacen las extensiones del navegador.
</li><li> Las URL chrome pueden usarse para acceder paquetes instalados y abrirlos con privilegios ampliados.
</li><li> HTML, XML y XUL tienen diferentes tipos de documentos. Algunas características pueden usarse en cualquier clase de documento, mientras que otras son específicas para una clase de documento.
</li></ul>
<p>En las próximas secciones describiremos la estructura básica de un paquete chrome que será instalado dentro de Mozilla. Sin embargo, si desea comenzar a construir una aplicación simple, puede saltar a <a href="es/Tutorial_de_XUL/Creando_una_ventana">Creando una ventana</a> y dejarlas para después.
</p>
<h3 name="Organizaci.C3.B3n_del_paquete"> Organización del paquete </h3>
<p>Mozilla está organizado de tal forma que te permite tener tantos componentes pre-instalados como quieras. Cada extension es, además, un componente con un chrome URL distinto. Además tendrá un componente para cada tema o locale instalado. Cada uno de estos componentes, o paquetes, está compuesto de un conjunto de ficheros que describen la interfaz de usuario para cada uno. Por ejemplo, el componente de mensajería tendrá descripciones de la ventana de listado de mensajes de correo, la ventana de composición y los cuadros de la libreta de direcciones.
</p><p>Los paquetes que vienen con Mozilla están localizados en la carpeta chrome, que puedes encontrar en el directorio donde instalaste Mozilla. La carpeta chrome es donde encontrarás todos estos archivos que describen la interfaz de usuario para el navegador Mozilla, el cliente de correo y para otras aplicaciones. Habitualmente pondrás todos los archivos XUL para una aplicación en esta carpeta, excepto para las extensiones, que serán instaladas en la carpeta de extensiones de un usuario concreto. El simple hecho de copiar un archivo XUL en la carpeta 'chrome' no proporcionará al archivo ningún permiso extra ni será accesible a través de chrome URL. Para conseguir estos privilegios extra, tendrás que crear un archivo manifest y ponerlo en la carpeta chrome. Este archivo es fácil de crear, y habitualmente sólo contiene un par de líneas de código. Se usa para enlazar un chrome URL a un archivo o ruta de una carpeta en el disco donde los archivos XUL estan situados. Detalles de como crear este archivo serán vistos en la siguiente sección.
</p><p>La única forma de crear contenido que pueda ser accedido a través de chrome URL es creando un paquete como se describe en las siguientes secciones. Esta carpeta se denomina provablemente 'chrome' porqué parece ser un nombre conveniente para usarse para el directorio donde se mantienen los paquetes chrome que se incluyen con Mozilla.
</p><p>Para favorecer la confusión, hay otros dos sitios donde la palabra chrome debe aparecer. El primero es el argumento '-chrome', y el segundo es el modificador chrome para la función 'window.open'. Ninguna de estas características otorga privilegios extra; en cambio son usadas para abrir una nueva ventana arriba del todo sin el menú o la barra de herramientas del navegador. Habitualmente se usará esta característica en aplicaciones XUL donde no se quiera que aparezca las diferentes barras del navegador alrededor de tus cuadros de diálogo.
</p><p>Los archivos para un paquete son normalmente unidos en un simple archivo JAR. Un archivo JAR debe ser creado y examinado usando una aplicación ZIP. Por ejemplo, puedes abrir un archivo JAR en la carpeta chrome de Mozilla para ver la estructura básica de un paquete. Aunque es normal unir los archivos en un archivo JAR, los paquetes deben ser también accedidos de forma expandida en un directorio. Aunque habitualmente no distribuirás un paquete de esta forma, es práctico durante su desarrollo, ya que puedes editar el archivo directamente para después recargarlo sin tener que volver a empaquetar o reinstalar los archivos.
</p><p>Habitualmente hay tres partes distintas en un paquete chrome, aunque son opcionales. Cada parte está almacenada en una carpeta distinta. Estas tres partes son el contenido, la piel (skin) y el locale, explicados más abajo. Un paquete particular debe proporcionar una o más pieles (skins) y locales, pero un usuario puede reemplazarlos con los suyos propios. Además, el paquete debe incluir varias aplicaciones distintas cada una accesible a través de diferentes chrome URLs. El sistema de paquetes es suficientemente flexible por lo que puedes incluir todas las partes que necesites y permitir que otras partes, como el texto para diferentes idiomas, sean descargadas de forma separada.
</p><p>Los tres tipos de paquetes chrome son:
</p>
<ul>
<li><b>Contenido</b> - Ventanas y scripts<br>
Las declaraciones de las ventanas y los elementos de la interfaz de usuario contenidos con ellos. Se almacenan en archivos XUL, que tienen extension xul. Un paquete de contenido puede tener múltiples archivos XUL, pero la ventana principal debe tener un nombre de archivo que es el mismo que el nombre del paquete. Por ejemplo, el paquete editor tendrá un archivo que se llamará editor.xul. Los scripts están situados en archivos separados junto a los archivos XUL.
</li>
<li><b>Piel (Skin)</b> - Capas del estilo, imágenes y otros archivos específicos del tema<br>
Las capas del estilo describen detalles del aspecto de una ventana. Se almacenan de forma separada a los archivos XUL para facilitar modificar la piel (skin o tema) de una aplicación. Algunas imágenes usadas también se almacenan aquí.
</li>
<li><b>Locale</b> - Archivos específicos locale<br>
Todo el texto que se muestra en una ventana se almacena de forma separada. De esta forma, un usuario puede tener un conjunto para su propio idioma.
</li>
</ul>
<h3 name="Paquetes_de_contenido"> Paquetes de contenido </h3>
<p>El nombre de un archivo JAR debe describir que contiene, pero no se puede asegurar que contiene sino se ha visto su contenido. Vamos a usar el paquete del navegador incluído con Firefox a modo de ejemplo. Si extraemos los archivos de browser.jar, nos encontraremos con una jerarquía de directorios similar a la que se muestra a continuación:
</p>
<pre>content
   browser
      browser.xul
      browser.js
      -- other mail XUL and JS files goes here --
      bookmarks
         -- bookmarks files go here --
      preferences
         -- preferences files go here --
.
.
.
</pre>
<p>Ésta es fácilmente reconocible como un paquete de contenidos, ya que la carpeta más superior se llama 'content'. Para pieles (skins), esta carpeta normalmente será denominada como 'skin' y para locales, se le llamará 'locale'. Este esquema de nombres no es necesario pero es una práctica habitual para hacer más claras las partes de un paquete. Algunos paquetes deben incluir una sección de contenidos, una piel (skin) y un locale. En este caso, nos encontraremos una subcarpeta para cada tipo. Por ejemplo, Chatzilla está distribuído de esta forma.
</p><p>La carpeta content/browser contiene un número de archivos con extensiones xul y js. Los archivos XUL son los que tienen la extension xul. Los archivos con extensiones js son archivos JavaScript que contienen scripts que se encargan de la funcionalidad de una ventana. Muchos archivos XUL tienen un archivo script asociado con ellos, y muchos deben tener más de uno.
</p><p>En el listado superior, dos archivos han sido vistos. De hecho hay otros, pero para simplificar no serán vistos. El archivo browser.xul es el archivo XUL que describe la ventana principal del navegador. La ventana principal para un paquete de contenido debe tener el mismo nombre que el paquete con una extensión xul. En este caso, el nombre del paquete es 'browser', por eso esperaremos encontrarnos con 'browser.xul'. Algunos de los otros archivos XUL describen ventanas distintas. Por ejemplo, el archivo pageInfo.xul describe el cuadro de información de la página.
</p><p>Muchos paquetes incluirán un archivo contents.rdf que describe el paquete, su autor y el revestimiento que usa. Sin embargo, este archivo está obsoleto y ha sido reemplazado con un mecanismo más simple. Este nuevo método es el archivo manifest mencionado anteriormente, y encontraremos estos archivos con la extensión .manifest en el directorio chrome. Por ejemplo, browser.manifest describe el paquete del navegador.
</p><p>Varias subcarpetas, como son marcadores y preferencias, describen secciones adicionales  del navegador. Están ubicadas en diferentes carpetas sólo para mantener los archivos más organizados.
</p>
<h3 name="Pieles_.28Skins.29_o_Temas"> Pieles (Skins) o Temas </h3>
<p>Al código subyacente de Mozilla se le llama pieles (skins), aunque a la interfaz de usuario se le llama temas, pero ambos se refieren a la misma cosa. El archivo classic.jar describe el tema por defecto que viene con Firefox. La estructura es similar a los paquetes de contenido. Por ejemplo, examinando classic.jar:
</p>
<pre>skin
   classic
      browser
         -- browser skin files go here --
      global
         contents.rdf
         -- global skin files go here --.
.
.
</pre>
<p>Nuevamente, esta estructura de carpetas no es necesaria y es usada por comodidad. Realmente puedes colocar todos los archivos en una carpeta arriba del todo y no usar subcarpetas. Sin embargo, para aplicaciones mayores, las subcarpetas son usadas para separar los diferentes componentes. En el ejemplo anterior, una carpeta existe para los archivos del tema para el navegador y otra para los archivos del tema global. La carpeta global contiene archivos de la piel (skin) que son comunes a todos los paquetes. Estos archivos se aplicarán a todos los componentes y serán incluídos para tus aplicaciones autónomas. La parte global define el aspecto de todos los chismes comunes XUL, mientras que las otras carpetas contienen archivos que son específicos de estas aplicaciones. Firefox incluye tanto los archivos del tema global como los del navegador en un archivo, pero ambos pueden ser incluídos por separado.
</p><p>Una piel (skin) se compone de archivos CSS y de un número de imágenes usadas para definir el aspecto y la interfaz. El archivo browser.css es usado por browser.xul y contiene estilos que definen el aspecto de varias partes de la interfaz del navegador. Nuevamente, nótese como el archivo browser.css tiene el mismo nombre que el paquete. Cambiando los archivos CSS, puedes ajustar el aspecto de una ventana sin cambiar su función. De esta forma puedes crear un nuevo tema. La parte XUL continúa igual pero la parte de la piel (el skin) cambia independientemente.
</p>
<h3 name="Locales"> Locales </h3>
<p>El archivo en-US.jar describe la información del idioma para cada componente, en este caso para US English. Como las pieles (skins), cada idioma contendrá archivos que especifican texto usado por el paquete pero para un idioma concreto. La estructura locale es similar a las otras, por eso no será explicada aquí.
</p><p>El texto localizado es almacenado en dos tipos de archivos: archivos DTD y archivos de propiedades. Los archivos DTD tienen una extensión dtd y contienen declaraciones de identidad, una para cada cadena de texto usada en una ventana. Por ejemplo, el archivo browser.dtd contiene declaraciones de identidad para cada comando del menú. Además, los atajos de teclado para cada comando también están definidos, ya que deben de ser diferentes para cada idioma. Los archivos DTD son usados por los archivos XUL por eso, en general, tendrás uno para cada archivo XUL. La parte locale también contiene archivos de propiedades, que son similares, pero son usados por archivos script. El archivo browser.properties contiene algunas cadenas localizadas.
</p><p>Esta estructura nos permite traducir Mozilla o un componente a un idioma distinto sólo añadiendo un nuevo locale para ese lenguaje. No tienes que cambiar la parte de XUL. Además, otra persona puede proporcionar un paquete separado que aplica una piel (skin) o locale a tu parte de contenido, proporcionando soporte de esta manera a un nuevo tema o idioma sin tener que modificar el paquete original.
</p>
<h3 name="Otros_paquetes"> Otros paquetes </h3>
<p>Hay un paquete especial llamado toolkit (o global). Vimos anteriormente el directorio global para skins (pieles). El archivo toolkit.jar contiene el contenido correspondiente para ello. Contiene algunos diálogos globales y definiciones. Además, define la apariencia por defecto y la funcionalidad de varios widgets XUL comunes como son los cuadros de texto y los botones. Los archivos localizados en la parte global de un paquete skin contienen la apariencia por defecto para todos los elementos de la interfaz XUL. El paquete toolkit es usado por todas las aplicaciones XUL.
</p>
<h3 name="A.C3.B1adiendo_un_paquete"> Añadiendo un paquete </h3>
<p>Mozilla coloca los paquetes incluídos con la instalación en la carpeta chrome. Sin embargo, no es necesario colocarlos aquí. Si tienes otro paquete instalado, puede ser colocado en cualquier parte del disco, siempre que un archivo manifest apunte a él. Es una práctica frecuente colocar los paquetes en la carpeta chrome simplemente por ser conveniente, sin embargo sólo funcionarán correctamente desde otro directorio o desde algún lugar de tu red local. No puedes almacenarlos en un lugar remoto, a no ser que el sitio remoto sea montado a través del sistema de ficheros local.
</p><p>Hay dos carpetas chrome usadas para las aplicaciones XUL, una está instalada en el mismo sitio donde las aplicaciones están instaladas, y la otra es parte del perfil del usuario. Lo primero permite a los paquetes ser compartidos por todos los usuarios, mientras que lo segundo permite la creación de paquetes sólo por un usuario o grupo específico. Extensiones, cuando son instaladas en una carpeta de extensiones diferente, son también normalmente específicas del usuario. Cualquier archivo manifest situado en cualquier carpeta chrome será examinado para ver que los paquetes instalados.
</p><p>En la siguiente sección, veremos como referirse a un paquete chrome usando chrome URL.
</p><p>{{template.AnteriorSiguiente("Tutorial de XUL:Introducción", "Tutorial de XUL:La URL chrome")}}
<span class="comment">Interwiki Language Links</span>
</p>{{ wiki.languages( { "ja": "ja/XUL_Tutorial/XUL_Structure", "pl": "pl/Pomocnik_XUL/Struktura_XUL" } ) }}
Revertir a esta revisión