Esta página está traduciéndose a partir del artículo Updating_extensions_for_Firefox_3, razón por la cual puede haber algunos errores sintácticos o partes sin traducir. Puedes colaborar continuando con la traducción
Este artículo ofrece información que será de utilidad para desarrolladores que deseen actualizar sus extensiones, para que éstas funcionen correctamente con Firefox 3.
Antes de continuar, queremos sugerirte algo: si el único cambio que requiere tu extensión es modificar el campo maxVersion en el manifiesto de instalación, la extensión está disponible en el servidor addons.mozilla.org y ¡no necesitarás actualizar tu extensión a una nueva versión! Simplemente usa el Panel de Control para desarrolladores en AMO para modificar 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 la mayoría de las extensiones, el único que será necesario— es actualizar el archivo install.rdf
dentro del manifiesto de instalación para indicar la compatibilidad con Firefox 3.
Sólo debes buscar la línea que indica la máxima versión compatible de Firefox, lo que para Firefox 2, probablemente sea:
<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 la versión. Por lo tanto, en lugar de escribir "3.0.0.*", sólo necesitas usar "3.0.*".
Ha habido (y continuará habiendo) una serie de cambios en las APIs, lo que muy probablemente averiará algunas extensiones. Aún estamos trabajando para confeccionar una lista completa de estos cambios.
Install.js
en vez de un manifiesto de instalación, necesitas hacer la transición a un manifiesto de instalación lo más pronto posible. Firefox 3 no implementará el script install.js
en documentos XPI.Agregar localizaciones al manifiesto de instalación
Firefox 3 cuenta con tres nuevas propiedades en el manifiesto de instalación para especificar descripciones de localización. Los métodos antiguos todavía 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 Localizar las_descripciones_de_las_extensiones para más detalles.
Paso 2: Asegúrate de suministrar actualizaciones seguras
Si suministras extensiones por tu propia cuenta y no usas un proveedor de hosting seguro como addons.mozilla.org, debes asegurarte de suministrar algún método seguro para la actualización de tus extensiones. Esto puede hacerse de dos formas: puedes usar un hosting con servicio de SSL o bien, puedes usar claves criptográficas para firmar la información de actualización. Lee Cómo hacer actualizaciones seguras para más información.
Paso 3: Debes estar al tanto de los cambios en las APIs
Muchas APIs han sido modificadas de forma significativa. Los cambios más importantes, que seguramente afectarán a muchas extensiones son:
DOM
Los nodos de documentos externos deberán copiarse idénticamente usando importNode()
(o adoptarlos usando adoptNode()
) antes de poder insertarlos en el documento actual. Para más información acerca de cuestiones relacionadas con ownerDocument
, visita W3C DOM FAQ.
Actualmente, Firefox no exige hacerlo aunque sí lo hizo durante algún tiempo, durante el desarrollo de Firefox 3. Lo que ocurrió fue que muchos sitios sufrían averías cuando esta política era obligatoria. Nuestra recomendación para los desarrolladores web es que corrijan su código para cumplir con esta regla y así lograr una mejor compatibilidad a futuro.
Marcadores e Historial
Si de alguna forma tu extensión tiene acceso a Marcadores o Historial, necesitarás un gran esfuerzo para hacer que sea compatible con Firefox 3. Las APIs antiguas que daban acceso a esta información han sido reemplazadas por la nueva arquitectura Catálogo (Biblioteca). Visita la Guía para la migración a Catálogo (Biblioteca) para más detalles acerca de cómo actualizar tus extensiones para el uso de las APIs de Catálogo (Biblioteca).
Administrador de descargas
La API del Administrador de descargas ha cambiado ligeramente debido a la transición del almacén de datos RDF al uso de la API Almacenamiento. Esto debería ser una transición sencilla y fácil. Además , se ha modificado la API que controla los procesos de descarga para permitir varios receptores del administrador de descargas. Visita nsIDownloadManager
, nsIDownloadProgressListener
y Controlar descargas para más información.
Administrador de contraseñas
Si tu extensión tiene acceso a información de inicio de sesión de usuario en el Administrador de contraseñas, deberás actualizarla para poder utilizar la nueva API para el Administrador de inicio de sesión.
- El artículo Utilizar nsILoginManager incluye ejemplos y hasta una demostración de cómo debes escribir extensiones que funcionen tanto con el Administrador de contraseñas como con el Administrador de inicio de sesión, de manera que ambos funcionen con Firefox 3 y versiones anteriores.
nsILoginInfo
nsILoginManager
También puedes sobrescribir el almacén del administrador de contraseñas interno si quieres ofrecer tu propia implementación del almacén de contraseñas en la extensión. Visita Crear un módulo de almacenamiento para el Administrador de inicio de sesión 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 ahora contempla menús principales, menús contextuales y paneles. Se ha creado una guía para Utilizar Ventanas emergentes que detalla cómo funciona este sistema. Algo que debes tener en cuenta, es que se desaconseja el uso de popup.showPopup
en favor de los nuevos popup.openPopup
y popup.openPopupAtScreen
.
Autocompletar
El método handleEnter()
de la interfaz nsIAutoCompleteController
ha cambiado para aceptar un argumento que indique si el texto ha sido seleccionado desde una ventana emergente para Autocompletar o bien, por el usuario que ha pulsado la tecla Entrar (Enter) después de ingresar texto.
DOMParser
- Cuando se inicia una instancia de
DOMParser
, ésta hereda el código de la llamada principal, además de los códigosdocumentURI
ybaseURI
de la ventana del constructor de donde proviene. - Si el llamante 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
de forma predeterminada.- El primer parámetro es el principal que se debe utilizar y por esto, se sobrescribe el valor principal predeterminado generalmente heredado.
- El segundo parámetro es el
documentURI
que se debe utilizar. - El tercer parámetro es el
baseURI
que se debe utilizar.
- Si inicias un
DOMParser
usando una instrucción comocreateInstance()
y no llamas al métodoinit()
deDOMParser
, al intentar iniciar la operación de análisis, se creará e iniciará automáticamente unDOMParser
con un principal nulo y punterosnull
paradocumentURI
ybaseURI
.
Interfaces eliminadas
Las siguientes interfaces han sido eliminadas en Gecko 1.9, el motor de renderizado de Firefox 3. Si tu extensión utiliza cualquiera de estas interfaces, deberás actualizar tu código:
nsIDOMPaintListener
nsIDOMScrollListener
nsIDOMMutationListener
nsIDOMPageTransitionListener
nsICloseAllWindows
(Lee el bug 386200)
Paso 4: Comprueba los cambios importantes en el chrome
Se ha producido un cambio menor en el chrome que puede requerir cambios 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 inferior de la ventana del navegador. Aunque esto no afecta la apariencia de la pantalla, puede que afecte tu extensión si el chrome se superpone, en relación a los elementos descriptos.
Por ejemplo, si has superpuesto algún elemento del chrome antes de la barra de estado de la siguiente manera:
<window id="main-window"> <something insertbefore="status-bar" /> </window>
Debes cambiar tu código a algo que se parezca a:
<vbox id="browser-bottombox"> <something insertbefore="status-bar" /> </vbox>
O bien, emplear la siguiente técnica para hacer que la superposición funcione en Firefox 2 y Firefox 3 por igual:
<window id="main-window"> <vbox id="browser-bottombox" insertbefore="status-bar"> <something insertbefore="status-bar" /> <vbox> </window>
Otros cambios
Añade aquí cambios sencillos que debas realizar cuando actualizas tu extensión para que funcione con Firefox 3.
- Por razones de seguridad, se ha dejado de implementar
chrome://browser/base/utilityOverlay.js
. Si lo estabas usando, deberás cambiarlo porchrome://browser/content/utilityOverlay.js
. - Para implementar
nsIAboutModule
ahora debes incluir el métodogetURIFlags
. Visita nsIAboutModule.idl para consultar la documentación. Esto afecta a las extensiones que brinden nuevas URIs del tipoabout:
. ( bug 337746 ) - El elemento tabbrowser ya no forma parte del "conjunto de herramientas" ( bug 339964 ). Esto significa que este elemento ya no está disponible en aplicaciones y extensiones XUL. Este elemento sigue siendo parte de la ventana principal de Firefox (browser.xul).
- Es necesario documentar los cambios en nsISupports proxies [1] y posiblemente, también aquellos relacionados con el procesamiento de interfaces.
- Si utilizas instrucciones de proceso XML, como por ejemplo
<?xml-stylesheet ?>
en tus archivos XUL, ten en cuenta los cambios descriptos en el bug 319654 :- Se han añadido los XML PIs al DOM del documento XUL. Esto significa que no se garantiza que
document.firstChild
sea el elemento raíz. Si necesitas hacer referencia al documento raíz en tu script, usadocument.documentElement
en su lugar. - Las instrucciones de procesamiento
<?xml-stylesheet ?>
y<?xul-overlay ?>
ahora no tienen efecto fuera del prólogo del documento.
- Se han añadido los XML PIs al DOM del documento XUL. Esto significa que no se garantiza que
- Cuando se carga contenido web (es decir, se carga la página en el navegador) no se inicia
window.addEventListener("load", myFunc, true)
. Esto ocurre debido a que el bug 296639 cambia la forma de comunicación entre las ventanas internas y externas. Para corregir esto en forma sencilla, empleagBrowser.addEventListener("load", myFunc, true)
, según se describe aquí. Además, funciona también para Firefox 2. content.window.getSelection()
ofrece un objeto (que puede ser convertido en cadena contoString()
). Se desaconseja el uso decontent.document.getSelection()
que devuelve una cadena.- A partir de Firefox 2, se desaconsejó el uso de
event.preventBubble()
y actualmente, 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' gracias a la corrección hecha en el bug 52209 . En su lugar, podrías usarnsITimer
. - Si en tu extensión necesitas permitir una fuente no fiable (un sitio web, por ejemplo) para acceder al chrome de la extensión, debes usar el nuevo flag
contentaccessible
flag.