Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

Actualizar extensiones para Firefox 3

Este artículo ofrece información que será de utilidad para desarrolladores que deseen actualizar sus extensiones, con el propósito de que éstas funcionen correctamente con Firefox 3.

Antes de continuar, queremos sugerirte algo: si el único cambio que requiere tu extensión es un empuje al campo maxVersion en el manifiesto de instalación, y la extensión está disponible en el servidor addons.mozilla.org, ¡no necesitas actualizar tu extensión a una nueva versión! Simplemente usa el Panel de Control para desarrolladores en AMO para ajustar maxVersion. De esta manera, puedes evitar el trabajo de tener que volver a revisar tu extensión.

Paso 1: Actualiza el manifiesto de instalación

El primer paso y para muchas extensiones, el único que será necesario es actualizar el archivo install.rdf dentro del manifiesto install manifest para indicar la compatibilidad con Firefox 3.

Simplemente encuentra la línea que indica el número de la versión máxima compatible de Firefox, lo que para Firefox 2 es algo como:

 <em:maxVersion>2.0.*</em:maxVersion>

Cámbiala para indicar compatibilidad con Firefox 3:

 <em:maxVersion>3.0.*</em:maxVersion>

A continuación, reinstala la extensión.

Recuerda que en Firefox 3 no necesitas incluir el ".0" extra en el número de versión, con lo que, en lugar de usar "3.0.0.*", sólo necesitas usar "3.0.*".

Nota: Ten en cuenta que actualmente, se esperan muchos cambios en Firefox 3. Estos cambios podrían romper algunas extensiones, por lo que no deberías ofrecer una nueva versión con maxVersion 3.0.* a los usuarios, hasta que salgan las versiones RC (release candidate). Durante el periodo Beta, deberías usar maxVersion 3.0b5.

Ha habido (y continuará habiendo) una serie de cambios en la API que muy probablemente romperá algunas extensiones. Aún estamos trabajando para hacer una lista de todos estos cambios.

Nota: Si tu extensión aún usa un script Install.js en lugar de un install manifest, necesitas hacer la transición a un manifiesto de instalación ahora. Firefox 3 ya no implementa scripts install.js en archivos XPI.

Agregar localizaciones al manifiesto de instalación

Firefox 3 tiene tres nuevas propiedades en el manifiesto de instalación para especificar descripciones de localización. Los métodos antiguos aún funcionan. Sin embargo, los nuevos permiten que Firefox escoja la localización aún cuando la extensión esté deshabilitada o pendiente de instalación. Visita Localizing extension descriptions para más detalles.

Paso 2: Asegúrate de suministrar actualizaciones seguras

Si tienes la extensión en tu propio servidor y no en un servidor seguro como addons.mozilla.org, debes suministrar un método para la descarga segura de la extensión. Esto puede hacerse manteniendo un servidor SSl, o usando claves criptográficas para firmar la información de la extensión. Lee Securing Updates para más información.

Paso 3: Debes estar al tanto de los cambios en las API

Muchas API han sido modificadas de forma significativa. Los cambios más importantes, que seguramente afectarán a muchas extensiones son:

DOM

Nodes from external documents should be cloned using document.importNode() (or adopted using document.adoptNode()) before they can be inserted into the current document. For more on the Node.ownerDocument issues, see the W3C DOM FAQ.

Firefox doesn't currently enforce this rule (it did for a while during the development of Firefox 3, but too many sites break when this rule is enforced). We encourage Web developers to fix their code to follow this rule for improved future compatibility.

Marcadores e Historial

Si tu extensión accede a los marcadores o al historial de alguna forma, necesitarás un gran esfuerzo para hacerla compatible con Firefox 3. Los API antiguos que accedian a esta información, han sido reemplazados por la nueva arquitectura Catálogo. Ver Guía para la migración a catálogo para más detalles de cómo actualizar tus extensiones en el uso de las API de catálogo.

Administrador de descargas

El API del administrador de descargas ha cambiado ligeramente debido a la transición desde el uso del almacén de datos RDF al uso del API Storage. Esto debería ser una transición pequeña y fácil. Adicionalmente, el API para vigilar los procesos de descarga ha cambiado para que maneje varias escuchas de descarga. Ver nsIDownloadManager, nsIDownloadProgressListener, y Monitoring downloads para más información.

Administrador de contraseñas

Si tu extensión accede a información de identidad de usuario del Administrador de Contraseñas, necesitará ser actualizada para usar el nuevo API Administrador de Contraseñas.

  • El artículo Using nsILoginManager incluye ejemplos, que incluyen una demostración de cómo debes escribir extensiones que trabajen tanto con el Administrador de Contraseñas (Password Manager) como con el Administrador de Registro (Login Manager) para que ambos trabajen con Firefox 3 y versiones anteriores.
  • nsILoginInfo
  • nsILoginManager

También puedes sobre-escribir el almacén del administrador de contraseñas interno si quieres ofrecer tu propio almacén en tu extensión. Ver Creating a Login Manager storage module para más detalles.

Ventanas emergentes (Menús, Menús contextuales, Tooltips y Paneles)

En Firefox 3, se ha modificado sustancialmente el sistema XUL de ventanas emergentes. El sistema de ventanas emergentes, contempla ahora, menús, menús contextuales y paneles. Se ha creado una guía a using Popups, detallando cómo funciona este sistema. Una cosa a tener en cuenta, es que se desaconseja el uso de popup.showPopup en favor de los nuevos popup.openPopup y popup.openPopupAtScreen.

Autocompletado

El método handleEnter() del interfaz nsIAutoCompleteController ha cambiado para aceptar un argumento que indique si el texto ha sido seleccionado en una ventana de Autocompletado o por que el usuario ha pulsado Intro después de teclear algún texto.

Analizador del DOM (DOMParser)

  • Cuando se inicia una instancia del DOMParser, se hereda el código de la llamada principal y los códigos documentURI y baseURI de la ventana del constructor de donde viene.
  • Si elllamante tiene privilegios UniversalXPConnect, puede pasar parámetros a new DOMParser(). Si se pasan menos de tres parámetros, los parámetros restantes se pasarán con el valor null.
    • El primer parámetro es el principal a usar; esto sobre-escribe el valor heredado del principal.
    • El segundo parámetro es la documentURI a usar.
    • El tercer parámetro es la baseURI a usar.
  • Si inicias un DOMParser usando un contrato como createInstance(), y no llamas al método init() de DOMParser, al intentar iniciar la operación de análisis, se creará automáticamente una DOMParser con un principal nulo y un puntero null a documentURI y baseURI.

Interfaces eliminados

Los siguientes interfaces han sido eliminados en Gecko 1.9, que es el motor de Firefox 3. Si tu extensión hace uso de cualquiera de estos interfaces, necesitas actualizar tu código:

  • nsIDOMPaintListener
  • nsIDOMScrollListener
  • nsIDOMMutationListener
  • nsIDOMPageTransitionListener
  • nsICloseAllWindows (see bug 386200)

Paso 4: Comprueba los cambios importantes en el chrome

Ha habido un cambio pequeño en el chrome que puede requerir cambis en tu código. Se ha añadido un nuevo vbox llamado "browser-bottombox", que integra la barra de búsqueda y la barra de estado en la parte baja de la ventana del navegador. Aunque esto no afecta a la apariencia de la pantalla, puede que afecte a tu extensión si está hace uso de los elementos descritos.

Por ejemplo, si has recubierto algún elemento del chrome antes de la barra de estado de esta manera:

<window id="main-window">
  <something insertbefore="status-bar" />
</window>

Debes cambiar tu código a algo como:

<vbox id="browser-bottombox">
  <something insertbefore="status-bar" />
</vbox>

O usar la siguiente técnica para hacer que el recubrimiento funciones tanto en Firefox 2 como Firefox 3:

<window id="main-window">
  <vbox id="browser-bottombox" insertbefore="status-bar">
    <something insertbefore="status-bar" />
  <vbox>
</window>

Nota: Este cambio es efectivo a partir de Firefox 3 beta 4.

Otros cambios

Añade los cambios sencillos que tengas que realizar al actualizar tu extensión para que funciones con Firefox 3.

Es necesario documentar los interfaces a y los relacionados con sus hilos.

  • Si usas instrucciones de proceso XML, tales como <?xml-stylesheet ?> en tus archivos XUL, ten en cuenta los cambios expuestos en bug 319654:
    1. Se añade al DOM del documento XUL, los XML PIs. Esto significa que document.firstChild no tiene garantía de ser el elemento raiz. Si necesitas referenciar el documento raiz en tu script, usa document.documentElement en su lugar.
    2. Las instrucciones de proceso <?xml-stylesheet ?> y <?xul-overlay ?> no tienen ahora efecto fuera del prologo del documento.
  • Cuando se carga contenido web (se carga la página en el navegador) no se inicia window.addEventListener("load", myFunc, true). Esto ocurre por que bug 296639 cambia la forma de comunicación entre las ventanas internas y externas. La forma fácil de corregir esto, es usar gBrowser.addEventListener("load", myFunc, true), según se describe aquí y que funciona también en Firefox 2.
  • content.window.getSelection() ofrece un objeto (que puede ser convertido en cadena con toString()), mientras que se desaconseja el uso de content.document.getSelection() que devuelve una cadena
  • Se desaconseja, a partir de Firefox 2, el uso de event.preventBubble() y por tanto ha desaparecido en Firefox 3. En su lugar, usa event.stopPropagation(), que también funciona en Firefox 2.
  • Los contadores de tiempo que se inician usando setTimeout(), ahora están bloqueados por las ventanas en modo 'modal' por el ajuste hecho por bug 52209. En su lugar, deberías usar nsITimer.
  • Si tu extensión necesita permitir una fuente no fiable (por ejemplo un sitio web) para acceder al chrome de la extensión, debes usar el nuevo flag contentaccessible flag.

Etiquetas y colaboradores del documento

Etiquetas: 
 Colaboradores en esta página: teoli, Sheppy, Pgulijczuk, deimidis, Nukeador, Ffranz, HenryGR
 Última actualización por: Sheppy,