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.
en favor de los nuevos showPopup
popup.
y openPopup
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ódigosdocumentURI
ybaseURI
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 valornull
.- 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 comocreateInstance()
, y no llamas al métodoinit()
deDOMParser
, al intentar iniciar la operación de análisis, se creará automáticamente unaDOMParser
con un principal nulo y un punteronull
adocumentURI
ybaseURI
.
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 error 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.
chrome://browser/base/utilityOverlay.js
ya no está implementado por razones de seguridad. Si estabas usando esto, debes cambiarlo achrome://browser/content/utilityOverlay.js
.- Las implementaciones de
nsIAboutModule
ahora requieren implementar el métodogetURIFlags
. Ver nsIAboutModule.idl para más información. Esto afecta a las extensiones que ofezcan nuevas URI del tipoabout:
. (error 337746) - El elemento
tabbrowser
ya no forma parte de "toolkit" (error 339964). Esto significa que este elemento ya no está visible en las aplicaciones o extensiones XUL. Este elmento sigue siendo parte de la ventana principal de Firefox (browser.xul). - Cambios en nsISupports proxies
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 error 319654:- 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, usadocument.documentElement
en su lugar. - Las instrucciones de proceso
<?xml-stylesheet ?>
y<?xul-overlay ?>
no tienen ahora efecto fuera del prologo del documento.
- Se añade al DOM del documento XUL, los XML PIs. Esto significa que
- 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 error 296639 cambia la forma de comunicación entre las ventanas internas y externas. La forma fácil de corregir esto, es usargBrowser.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 contoString()
), mientras que se desaconseja el uso decontent.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, usaevent.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 error 52209. En su lugar, deberías usarnsITimer
. - 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.