Primeros pasos con Firefox-addon

Introducción

Complementos:

Los complementos de Firefox generalmente se agrupan en Extensiones y luego en “otros tipos” de complementos de Firefox.

Extensiones

Las extensiones permiten personalizar Firefox agregando o modificando la funcionalidad de Firefox. Algunos de los tipos de cosas que se pueden hacer con extensiones incluyen:

  • Cambiar cómo aparecen sitios web específicos, su contenido o cómo se interactúa con ellos.
  • Personaliza la interfaz de usuario de Firefox
  • Agregar funciones adicionales a Firefox
  • Cambiar cómo funcionan las características existentes de Firefox

Las extensiones de Firefox están, principalmente, escritas en JavaScript con la adición de algunas API de JavaScript.

Obsolescencia y eliminación de todos los tipos de extensiones que no sean WebExtensions


Los complementos de Firefox, particularmente las extensiones, están en un estado de cambio en este momento. Mozilla ha anunciado y confirmado que ha dejado obsoletos todos los tipos de extensiones de Firefox, excepto WebExtensions, y que todas las extensiones no basadas en WebExtensions se desactivarán en Firefox 57, que está programado para el 14 de noviembre de 2017.

Tipos de Extensiones

Firefox tiene cuatro tipos de extensiones (todas las cuales se conocen comúnmente como complementos):

  • WebExtensions: en el futuro, las WebExtensions son el único tipo de extensión de Firefox que será compatible. Estos complementos se describen mediante un archivo manifest.json. Esta API es similar a la que se usa para las extensiones de Google Chrome. Estos complementos usan HTML y CSS además de Javascript. Si bien Mozilla ha declarado que esta API es el futuro de las extensiones de Firefox, esta API aún está en desarrollo. Por ahora, probablemente sea mejor que desarrolle y pruebe su complemento WebExtension con Firefox Developer Edition o Firefox Nightly. También debe tomar nota cuidadosa de qué versión de Firefox se requiere para la funcionalidad que desea usar. Esta información se encuentra en la sección “Compatibilidad del navegador” de las páginas de documentación de MDN.

WebExtensions usa una API significativamente diferente a los otros tres tipos de extensiones. No hay, intencionalmente, la capacidad de usar las interfaces proporcionadas por ninguno de los otros tipos de complementos.

  • SDK adicional: [obsoleto; programado para eliminación] Estos complementos se describen mediante un archivo package.json que se genera inicialmente al ejecutar jpm init. Estas extensiones suelen usar require() para cargar las API de nivel alto o nivel bajo para interactuar con Firefox. Estos complementos usan HTML y CSS además de Javascript. Actualmente, estos complementos se empaquetan en una extensión de arranque cuando jpm run los carga para probarlos o jpm xpi los consolida en un archivo .xpi para su distribución (es decir, carga a AMO/Mozilla). En otras palabras, son extensiones de arranque con un envoltorio SDK.

Mozilla parece estar comprometido a continuar admitiendo extensiones basadas en Add-on SDK siempre que la extensión no use require("chrome"), o dependa de XUL, XPCOM, y XBL.

La mayoría de las cosas que se pueden hacer en una extensión de arranque se pueden hacer en una basada en SDK de complemento. Sin embargo, muchas de estas cosas pasan por alto el SDK, lo que pierde una parte significativa de los beneficios de usar el SDK adicional.

  • Bootstrapped: [obsoleto; programado para eliminación] Estas extensiones también se denominan comúnmente “sin reinicio” porque fueron el primer tipo de extensión de Mozilla que no requería que la aplicación se reiniciara para cargar/descargar el complemento. Sin embargo, sin reinicio es una descripción de cómo funcionan. El uso de “sin reinicio” como nombre para este tipo de complemento es confuso porque los complementos Add-on SDK y WebExtension tampoco requieren que la aplicación se reinicie al cargar o descargar el complemento. Por esa razón, hay una tendencia a dejar de usar “sin reinicio” como nombre para este tipo de complemento.

Estos complementos usan HTML y CSS además de Javascript. Muchos también interactúan con Firefox usando XUL.

Estos complementos tienen un archivo JavaScript llamado bootstrap.js que debe contener puntos de entrada (funciones) que se llaman para el complemento startup(), shutdown(), install() y desinstalar().

Estos complementos contienen un archivo install.rdf que describe el complemento. Por lo general, pero no siempre, también contienen un archivo chrome.manifest que describe cómo los archivos y directorios de la extensión se relacionan con la aplicación de Mozilla (por ejemplo, Firefox).

La mayoría, pero no todas, las cosas que se pueden hacer en las extensiones overlay/XUL/Legacy se pueden lograr en los complementos de arranque. Todo lo que se puede hacer en el SDK de complementos se puede hacer en una extensión de arranque (las extensiones de SDK de complementos son complementos de arranque con algunas capas de API basadas en JavaScript).

Mozilla ha declarado que planean desaprobar “complementos que dependen de XUL, XPCOM y XBL”. Si bien no todos los complementos con arranque dependen de estas tecnologías, existe una tendencia a que los complementos con arranque funcionen a un nivel más bajo que los complementos SDK de complementos y WebExtension. Por lo tanto, es más probable que utilicen estas tecnologías. Si bien hay algunos que dicen que todos los complementos de arranque están planeados para quedar obsoletos, no está claro que ese sea el caso. Después de todo, las extensiones Add-on SDK no están en desuso (a menos que usen require("chrome"), o dependan de XUL, XPCOM o XBL) y todas las extensiones Add-on SDK son extensiones de arranque, solo con un Envoltura de SDK.

  • Superposición/XUL/Legado: [obsoleto; programada para su eliminación] Estos complementos contienen un archivo install.rdf que describe el complemento y un archivo chrome.manifest para describir cómo funcionan los archivos del complemento. relacionarse con (por ejemplo, superponer) los archivos de la aplicación. El funcionamiento del complemento con la aplicación depende completamente de las relaciones descritas en el archivo chrome.manifest. Las únicas excepciones a esto son algunas cosas como iconos para la extensión y el archivo que describe las opciones de la extensión que se indican en el archivo install.rdf. Estas extensiones interactúan con la aplicación (por ejemplo, Firefox) a un nivel muy bajo. Esto tiende a hacerlos más propensos a romperse cuando se realizan cambios en la aplicación.

Estos complementos usan XUL, HTML y CSS además de Javascript. Algunos también usan XPCOM y XBL.

Está previsto que todas las extensiones Overlay/XUL/Legacy queden obsoletas.

Otros tipos de complementos de Firefox

Cuando la mayoría de la gente piensa en los complementos de Firefox, están pensando en las extensiones descritas anteriormente. Sin embargo, hay algunos tipos adicionales de complementos de Firefox:

Este “ejemplo” se copia principalmente, con algunas modificaciones, de mi respuesta de Makyen a una pregunta de stackoverflow. Algunas partes de este contenido se copiaron, o al menos se basaron en, la página de complementos en Mozilla Developer Network (MDN). Esto fue publicado originalmente por Makyen en la sección “Comentarios” de la etiqueta firefox-addon. Luego fue modificado por Ondřej Doněk, quien eliminó un extra “para”. En una sola edición realizada por nus, se movió de “Comentarios” a un “ejemplo” fijo titulado “Introducción”. Desafortunadamente, al hacerlo, el sistema perdió la información de atribución.

Instalación de un complemento temporal

Para probar un complemento que está desarrollando, probablemente desee instalarlo en Firefox temporalmente. Puede hacerlo cargándolo como un complemento temporal. Para hacerlo:

  1. Vaya a about:debugging
  2. Haga clic en “Cargar complemento temporal”
  3. En el selector de archivos, navegue hasta el directorio que contiene los archivos adicionales
  4. Seleccione cualquier archivo en la carpeta
  5. Haga clic en “Abrir”

La siguiente animación muestra la carga de un complemento llamado “aaaaaaaaaaaaaaaaaa - complemento de demostración” desde about:debugging y que el complemento aparece en about:addons:

cargando un complemento temporal

Como complemento temporal, puede cargar un complemento desempaquetado (un directorio que contiene todos los archivos para el complemento que empaquetaría en un archivo .xpi), o un complemento que está empaquetado en un archivo .xpi. Los complementos temporales no necesitan estar firmados. El complemento temporal permanece instalado hasta que se desinstala manualmente o se reinicia Firefox.

Documentación de Mozilla: Instalación temporal en Firefox

Extensiones web

WebExtensions se puede cargar como complementos temporales. Esto se puede hacer con los archivos adicionales desempaquetados o empaquetados en un archivo .xpi.

SDK complementario de Firefox

No puede cargar una extensión del SDK de complementos de Firefox como un complemento temporal sin empaquetarlo primero en un archivo .xpi con jpm xpi. En general, usará jpm run para probar su extensión SDK de complemento de Firefox.

Los archivos que normalmente se editan para una extensión SDK adicional no hacen una extensión completa sin algunas funciones de ajuste adicionales y el archivo package.json se traduce a install.rdf y, posiblemente, un archivo chrome.manifest. Este proceso envuelve la extensión Add-on SDK en un complemento Bootstrap/Restartless, que es entendido por Firefox. Sin este proceso, Firefox no podrá cargar el complemento. Este proceso lo realiza jpm xpi, lo que da como resultado un archivo empaquetado .xpi. Ejecutar jpm run también realiza este proceso, pero almacena los archivos resultantes en una ubicación temporal e invoca Firefox con el complemento instalado.

Bootstrap/sin reinicio

Los complementos Bootstrap/Restartless se pueden cargar como complementos temporales. Esto se puede hacer con los archivos adicionales desempaquetados o empaquetados en un archivo .xpi.

Legado/Superposición/XUL

Los complementos Legacy/Overlay/XUL no se pueden cargar como complementos temporales.

Instalar complementos sin firmar

Para instalar una extensión como complemento normal en las versiones Release o Beta de Firefox superiores o iguales a la versión 48, la extensión debe estar firmada por Mozilla. Una extensión se firma enviándola a AMO. Una vez que se firma, la extensión se puede instalar en cualquier versión de Firefox que admita. Para las versiones de Firefox anteriores a la versión 43, no se requería que las extensiones estuvieran firmadas por Mozilla. Los tipos de complementos que no sean extensiones no requieren la firma de Mozilla.

Puede instalar extensiones sin firmar como complementos normales en otras versiones de Firefox (por ejemplo, Firefox Developer Edition, [Firefox Nightly](https: //nightly.mozilla.org/), Beta sin marca o Versión sin marca) configurando xpinstall.signatures.required en false en acerca de:config. La configuración de esta opción también fue efectiva en las versiones Release y Beta de Firefox 43–48. Establecer esta opción no es efectivo en las versiones Release y Beta de Firefox desde la versión 48 en adelante.

La necesidad de poder instalar complementos sin firmar durante el desarrollo de complementos se ha reducido considerablemente gracias a la disponibilidad de instalar extensiones como Complementos temporales. No es necesario firmar los complementos temporales y se pueden cargar en cualquier versión actual de Firefox. Como su nombre lo indica, el principal inconveniente de los complementos temporales es que son temporales. Deben volver a instalarse cada vez que se reinicia Firefox. Sin embargo, hay casos de uso en los que es preferible instalar un complemento como un complemento normal, pero sin firmar, en lugar de un complemento temporal. Un complemento debe instalarse como un complemento sin firmar si es necesario que el complemento permanezca instalado incluso después de reiniciar Firefox. Esto podría ser deseable por una variedad de razones, que incluyen: pruebas de uso a largo plazo o para probar cómo funciona el complemento cuando se inicia Firefox.

4: https://www.wikiod.com/es/firefox-addon/primeros-pasos-con-firefox-addon#Instalación de un complemento temporal

Instalación de complementos para el desarrollo

Los complementos se pueden instalar como:

  1. Complementos normales, que se instalan hasta que se desinstalan
  2. Complementos temporales (solo extensiones): solo se instalan hasta que se reinicia Firefox o se pueden desinstalar manualmente antes.
  3. Usando jpm run (Add-on SDK únicamente): automáticamente ejecuta Firefox usando un perfil temporal con su complemento cargado.
  4. Usando web-ext run (solo WebExtensions): automáticamente ejecuta Firefox usando un perfil temporal con su complemento cargado como un complemento temporal. De forma predeterminada, supervisa los archivos de extensión en busca de cambios y recarga automáticamente su extensión cuando los archivos cambian.

Complementos normales

Instalar extensiones empaquetadas (es decir, el archivo .xpi) puede ser una simple cuestión de arrastrarlo y soltarlo en una ventana de Firefox que ejecute el perfil en el que desea instalarlo. También se pueden instalar directamente descargando la extensión desde AMO. Dependiendo de cuál sea su objetivo (un perfil, todos los perfiles, todos los usuarios, qué sistema operativo, etc.), existen otras opciones sobre cómo instalar extensiones.

Estas otras opciones incluyen varios directorios fuera del directorio del perfil en los que puede colocar el archivo .xpi para que se instale para todos los usuarios de una versión particular de Firefox, o para todos los perfiles de un usuario en particular. En Windows, también puede instalar una extensión agregando una clave al Registro de Windows. En general, estos otros directorios no son en los que instalaría un complemento en el que está escribiendo actualmente. Sin embargo, se pueden usar para asegurarse de que tiene los complementos que usa para respaldar su prueba/desarrollo cargados en cualquier perfil de Firefox o versión de Firefox que use. Por ejemplo, al colocar un archivo .xpi en <directorio de instalación de Firefox>/navegador/extensiones puede tener una extensión disponible incluso en el perfil temporal creado por jpm run (usado para probar el SDK de complemento de Firefox basado en extensiones).

Para desarrollo/prueba, puede hacer que la extensión esté en cualquier directorio de su disco local usando un archivo proxy de extensión de Firefox (cree un archivo llamado <em:id> de la extensión (en install.rdf para Bootstrap/Restartless y Overlay/Legacy) en el directorio de extensiones del perfil que contiene una línea con la ruta completa al directorio que contiene los archivos de la extensión). Las extensiones instaladas de esta manera casi siempre estarán sin firmar (ver más abajo). Por lo tanto, este método no es muy útil si desea instalar la extensión en una versión Release o Beta de Firefox.

Limitaciones en la instalación de complementos normales: Firma de complementos


Para instalar una extensión como complemento normal en las versiones Release o Beta de Firefox superiores o iguales a la versión 48, la extensión debe estar firmada por Mozilla. Una extensión se firma enviándola a AMO. Una vez que se firma, la extensión se puede instalar en cualquier versión de Firefox que admita. Para las versiones de Firefox anteriores a la versión 43, no se requería que las extensiones estuvieran firmadas por Mozilla. Los tipos de complementos que no sean extensiones no requieren la firma de Mozilla.

Puede instalar extensiones sin firmar como complementos normales en otras versiones de Firefox (por ejemplo, Firefox Developer Edition, [Firefox Nightly](https: //nightly.mozilla.org/), Beta sin marca o Versión sin marca) configurando xpinstall.signatures.required en false en acerca de:config. La configuración de esta opción también fue efectiva en las versiones Release y Beta de Firefox 43–48. Establecer esta opción no es efectivo en las versiones Release y Beta de Firefox desde la versión 48 en adelante.

Sin embargo, puede deshabilitar por completo la verificación de firmas de complementos en Firefox en todas las versiones, incluida la versión. La respuesta a la pregunta de desbordamiento de pila [¿Cómo puedo deshabilitar la verificación de firmas para los complementos de Firefox?] 10 describe cómo hacerlo.

La necesidad de poder instalar complementos no firmados con fines de desarrollo se ha reducido considerablemente gracias a la disponibilidad de instalar extensiones como Complementos temporales. No es necesario firmar los complementos temporales y se pueden cargar en cualquier versión actual de Firefox. Como su nombre lo indica, el principal inconveniente de los complementos temporales es que son temporales. Deben volver a instalarse cada vez que se reinicia Firefox. Sin embargo, hay casos de uso en los que es preferible instalar un complemento como un complemento normal, pero sin firmar, en lugar de un complemento temporal. Un complemento debe instalarse como un complemento sin firmar si es necesario que el complemento permanezca instalado incluso después de reiniciar Firefox. Esto podría ser deseable por una variedad de razones, que incluyen: pruebas de uso a largo plazo o para probar cómo funciona el complemento cuando se inicia Firefox.

Complementos temporales (solo extensiones)

Las extensiones WebExtensions, las extensiones basadas en SDK de complementos de Firefox y las extensiones Restartless/Bootstrap se pueden instalar como Complementos temporales desde about:debugging. Las extensiones se pueden cargar como complementos temporales en cualquier versión actual de Firefox. No es necesario firmar los complementos temporales y se pueden cargar desde desempaquetados (un directorio con archivos) o empaquetados (por ejemplo, un archivo .xpi).

Para obtener información detallada sobre la instalación temporal de extensiones, consulte Instalación de un complemento temporal.

11: https://www.wikiod.com/es/firefox-addon/primeros-pasos-con-firefox-addon#Instalación de un complemento temporal 12: https://developer.mozilla.org/en-US/Add-ons/WebExtensions/Temporary_Installation_in_Firefox