Escribir extensiones para Firefox/Thunderbird - PREELIMINAR

Ben Goodger, 02/05/2004

Introducción

Este documento describe cómo crear extensiones para Firefox 0.9 y posteriores, y Thunderbird 0.7 y posteriores.

Requisitos previos

Usted debe conocer XUL, JavaScript y otros lenguajes/tecnologías que se requieran para poner juntos en su extensión. Hay una gran candidad de recursos que describen esto, y muchos códigos de ejemplo. Este documento se centra en cómo empaquetar XUL, JS y otros componentes juntos en una extensión.

Presentación del fichero de extensión

Las nuevas extensiones de Firefox/Thunderbird son semejantes a:

extension.xpi:
              extension.rdf
              chrome/extension.jar
              components/extension.dll
              components/extension.js
              defaults/extension.something
              defaults/preferences/extension.js
       

Los scripts install.js ya no se usan para las extensiones de Firefox y Thunderbird. Si proporciona un script install.js script, no se leerá. El nuevo administrador de extensiones utiliza la declaración extension.rdf en la parte superior del XPI de su extensión para gestionar la instalación automáticamente. Puede proporcionar un install.js si su extensión también apunta a otras aplicaciones como Mozilla 1.x. Estas aplicaciones ignorarán el manifiesto extension.rdf y utilizarán el script en su lugar.

La presentación de sus ficheros dentro del XPI ahora se hace cumplir. Debe colocar los ficheros jar que quiera poner en el registro chrome para en el subdirectorio chrome, los compomentes XPCOM en components, ficheros predeterminados con excepción de los ficheros de preferencias predeterminadas en defaults y los ficheros de prefernecias predeterminadas en defaults/preferences. El administrado de extensiones comprueba estas ubicaciones varias durante el arranque, instalación y desisntalación para ejecutar varias operaciones como el registro crhome automático, la carga de las preferencias predeterminadas, etc.

extension.rdf

Su declaración extension.rdf será semejante a:

<?xml version="1.0"?>

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

  <Description about="urn:mozilla:extension:manifest">
    <-- properties -->

  </Description>      
</RDF>

Propiedades obligatorias de extension.rdf

Su fichero extension.rdf debe tener estas propiedades:

em:id
La clave GUID de la extensión - puede crearla usando guidgen (Windows), uuidgen (Unix) o «botbot uuid» en el IRC. Ejemplo.

<em:id>{daf44bf7-a45e-4450-979c-91cf07434c3d}</em:id>

em:version
Una clave Formato de Versión de Firefox (FVF) que identifica la versión que provee el paquete. Ejemplo.

<em:version>4.6</em:version>

em:targetApplication
Una clave especificando una aplicación a la que apunte esta extensión. La clave tiene el formato (app_guid,min_app_version,max_app_version) Esto quiere decir que la extensión trabajará conla aplicación identiricada por la GUID, desde la mínima versión hasta e incluyendo la máxima versión. Una declaración de extensión debe especificar como mínimo una de esas propiedades, y puede especificar más si la extensión apunta a múltiples aplicaciones que admitan este sistema de extensiones (por ejemplo Firefox y Thunderbird). Ejemplo.

<em:targetApplication>{ec8030f7-c20a-464f-9b0e-13a3a9e97384},0.7,1.2</em:targetApplication>

em:name
El nombre de la extensión - previsto para mostrar en la interfaz de usuario. Ejemplo.

<em:name>Mi extensión</em:name>

em:file
Un fichero crhome .jar que requiere registro chrome. Los arcos de em:file conducen a recursos con URIs del formato: urn:mozilla:extension:file:<nombreFichero>.jar. Cada una de estos pequeños recursos tiene un conjunto de propiedades em:package, em:locale y em:skin que especifican la ruta del fichero jar donde se necesita registrar un chrome. Ejemplo.

<em:file>
  <Description about="urn:mozilla:extension:file:myext.jar">
    <em:package>content/myext/</em:package>
    <em:locale>locale/en-US/myext/</em:locale>
    <em:skin>skin/classic/myext/</em:skin>

  </Description>
</em:file>

Propiedades opcionales de extension.rdf

Su fichero extension.rdf puede tener estas propiedade además de las anteroriores:

em:description
Una descripción corta de la extensión - para mostrarse en la interfaz de usuario. Ponga un texto corto para que entre. Ejemplo.

<em:description>Herramientas avanzadas tiruriru.</em:description>

em:creator
El nombre del creador/desarrollador principal - para mostrarse en la interfaz de usuario. Ejemplo.

<em:creator>Juan Perez</em:creator>

em:contributor
El(los) nombre(s) de el(los) colaborador(es) de la extensión - para mostrarse en la interfaz de usuario. Su declaración pude especificar 0 o más de estas propiedades. Ejemplo.

<em:contributor>Juana Perez</em:contributor>

em:homepageURL
Un enlace a la página de la extensión - para mostrarse en la interfaz de usuario. Ejemplo.

<em:homepageURL>http://www.tiruriru.com/</em:homepageURL>

em:updateURL
Un enlace a un fichero RDF personalizado que especifique las actualizaciones disponibles para la extensión. El formato se describe a continuación. Si está activado, el sistema de la extensión comprueba periódicamente este fichero RDF para determinar si hay alguna versión más nueva. Es recomendable no cambiar este campo si lista su extensión con un hospedador como update.mozilla.org y solo usa el servicio de actualiación proporcionado por ese hospedor. Su servidor debe enviar este fichero como text/rdf o el comprobador de actualizaciones no funcionará. Firefox sustituirá los siguientes valores dentro de esta URL en el caso de que desee generar la respuesta RDF dinámicamente, tal como ocurre usando PHP o CGI:

%ITEM_ID%Se actualizó la GUID de la extensión
%ITEM_VERSION%Se actualizó la versión de la extensión
%APP_ID%La GUID de la aplicación actual
%APP_VERSION%La versión de la aplicación actual

Ejemplo.

<em:updateURL>http://www.tiruriru.com/update.cgi?id=%ITEM_ID%&version=%ITEM_VERSION%</em:updateURL>

em:optionsURL
La URL chrome:// a las opciones de la extensión. Ejemplo.

<em:optionsURL>chrome://myext/content/options.xul</em:optionsURL>

em:aboutURL
La URL chrome:// a el acerca de la extensión FE. Ejemplo.

<em:aboutURL>chrome://myext/content/about.xul</em:aboutURL>

em:iconURL
Una URL chrome:// a un icono de 32 x 32 para mostrar en la interfaz de usuario del administrador de extensiones. Ejemplo.

<em:iconURL>chrome://myext/skin/icon.png</em:iconURL>

Fichero de ejemplo extension.rdf

<?xml version="1.0"?>

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

  <Description about="urn:mozilla:extension:manifest">
    <em:id>{daf44bf7-a45e-4450-979c-91cf07434c3d}</em:id>
    <em:version>4.6</em:version>

    
    <!-- Target Application this extension can install into, 
        with minimum and maximum supported versions. --> 
    <em:targetApplication>{ec8030f7-c20a-464f-9b0e-13a3a9e97384},0.7,1.2</em:targetApplication>
    
    <!-- Front End MetaData -->
    <em:name>NewExt2</em:name>
    <em:description>A test extension</em:description>

    <em:creator>Joe Creator</em:creator>
    <em:homepageURL>http://www.bengoodger.com/</em:homepageURL>
    <em:updateURL>http://www.bengoodger.com/software/mb/umo/update.rdf</em:updateURL>

    <!-- Front End Integration Hooks (used by Extension Manager)-->

    <em:optionsURL>chrome://newext2/content/options.xul</em:optionsURL>
    <em:aboutURL>chrome://newext2/content/options.xul</em:aboutURL>
    <em:iconURL>chrome://newext2/skin/newext2.png</em:iconURL>
    
    <!-- Packages, Skins and Locales that this extension registers -->

    <em:file>
      <Description about="urn:mozilla:extension:file:newext2.jar">
        <em:package>content/newext2/</em:package>
        <em:locale>locale/en-US/newext2/</em:locale>
        <em:skin>skin/classic/newext2/</em:skin>

      </Description>
    </em:file>
  </Description>      
</RDF>

Formato de Versión de Firefox

Todas las extensiones deben usar el Formato de Extensión de Firefox para describir su versionado. El FVF es semejante a:

major.minor.sub[+]

Ejemplo. 1.2.1 y 0.8+. «+» indica que la figura es del periodo de desarrollo entre versiones.

No son necesarios todos los campos, por ejemplo 1.2 es igual de válido que 1.2.0.

IDs de aplicaciones

Las siguientes son algunas GUIDs apuntando a aplicaciones comunes que puede usar en sus propiedades targetApplication:

Firefox{ec8030f7-c20a-464f-9b0e-13a3a9e97384}
ThunderbirdTBD.

RDF personalizado de actualización

TBD.