firefox-addonAan de slag met firefox-addon


Invoering

Add-ons:

Firefox-add-ons zijn over het algemeen gegroepeerd in Extensies en vervolgens "andere typen" Firefox-add-ons.

uitbreidingen

Met extensies kan Firefox worden aangepast door de functionaliteit van Firefox toe te voegen of te wijzigen. Enkele soorten dingen die met extensies kunnen worden gedaan, zijn onder meer:

  • Wijzig hoe specifieke websites worden weergegeven, hun inhoud of hoe hiermee wordt omgegaan.
  • Pas de Firefox-gebruikersinterface aan
  • Voeg extra functies toe aan Firefox
  • Wijzig hoe bestaande Firefox-functies werken

Firefox-extensies zijn hoofdzakelijk geschreven in JavaScript met toevoeging van enkele JavaScript-API's.

Afschrijving en verwijdering van alle soorten extensies behalve WebExtensions

Firefox-add-ons, met name extensies, zijn momenteel in beweging. Mozilla heeft aangekondigd en bevestigd dat ze alle typen Firefox-extensies hebben afgeschaft, behalve WebExtensions, en dat alle niet op WebExtensions gebaseerde extensies worden uitgeschakeld in Firefox 57, gepland voor 14-11-2017 .

Soorten extensies

Firefox heeft vier soorten extensies (die meestal add-ons worden genoemd):

  • WebExtensions : in de toekomst zijn WebExtensions het enige type Firefox-extensie dat wordt ondersteund. Deze add-ons worden beschreven door een manifest.json- bestand. Deze API is vergelijkbaar met wat wordt gebruikt voor Google Chrome-extensies. Deze add-ons gebruiken HTML en CSS naast Javascript. Hoewel Mozilla heeft verklaard dat deze API de toekomst van Firefox-extensies is, is deze API nog in ontwikkeling. Voor nu is het waarschijnlijk het beste om uw WebExtension-add-on te ontwikkelen en testen met Firefox Developer Edition of Firefox Nightly . U moet ook zorgvuldig noteren welke versie van Firefox vereist is voor de functionaliteit die u wenst te gebruiken. Deze informatie bevindt zich in het gedeelte "Browsercompatibiliteit" van de MDN-documentatiepagina's.

    WebExtensions gebruiken een aanzienlijk andere API dan de andere drie soorten extensies. Opzettelijk is er geen mogelijkheid om de interfaces van een van de andere add-on-types te gebruiken.

  • Add-on SDK : [ verouderd; gepland voor verwijdering ] Deze add-ons worden beschreven door een pakket.json- bestand dat in eerste instantie wordt gegenereerd door het uitvoeren van jpm init . Deze extensies gebruiken vaak require() om API's op hoog of laag niveau te laden om te communiceren met Firefox. Deze add-ons gebruiken HTML en CSS naast Javascript. Momenteel zijn deze add-ons verpakt in een bootstrapp-extensie wanneer ze worden geladen voor testen door jpm run of worden geconsolideerd in een .xpi- bestand door jpm xpi voor distributie (bijv. Uploaden naar AMO / Mozilla). Met andere woorden, het zijn bootstrapp-extensies met een SDK-wrapper.

    Mozilla lijkt toegewijd te zijn om add-on SDK-gebaseerde extensies te blijven ondersteunen zolang de extensie geen gebruik require("chrome") , of anderszins afhankelijk is van XUL , XPCOM en XBL .

    De meeste dingen die kunnen worden gedaan in een bootstrapp-extensie kunnen worden gedaan in een add-on SDK-gebaseerde extensie. Veel van dergelijke dingen omzeilen echter de SDK, waardoor een aanzienlijk deel van de voordelen van het gebruik van de add-on SDK verloren gaat.

  • Bootstrapped : [ verouderd; gepland voor verwijdering ] Deze extensies worden ook meestal "herstartloos" genoemd omdat ze het eerste type Mozilla-extensie waren waarvoor de toepassing niet opnieuw moest worden gestart om de add-on te laden / verwijderen. Herstartloos is echter een beschrijving van hoe ze werken. Het gebruik van "herstartloos" als de naam voor dit type add-on is verwarrend omdat voor zowel add-on SDK als WebExtension add-ons ook niet vereist dat de toepassing opnieuw wordt gestart bij het laden of verwijderen van de add-on. Om die reden bestaat de neiging om niet langer "herstartloos" te gebruiken als de naam voor dit type add-on.

    Deze add-ons gebruiken HTML en CSS naast Javascript. Velen communiceren ook met Firefox via XUL .

    Deze add-ons hebben een JavaScript-bestand met de naam bootstrap.js dat toegangspunten (functies) moet bevatten die worden aangeroepen voor add-on startup() , shutdown() , install() en uninstall() .

    Deze add-ons bevatten een install.rdf- bestand dat de add-on beschrijft. Ze bevatten meestal, maar niet altijd, ook een chrome.manifest- bestand dat beschrijft hoe de bestanden en mappen in de extensie zich verhouden tot de Mozilla-toepassing (bijvoorbeeld Firefox).

    De meeste, maar niet alle, dingen die kunnen worden gedaan in overlay / XUL / Legacy-extensies kunnen worden bereikt in bootstrapped add-ons. Alles wat kan worden gedaan in de add-on SDK kan worden gedaan in een bootstrapped-extensie (add-on SDK-extensies zijn bootstrapped add-ons met sommige op JavaScript gebaseerde API-lagen).

    Mozilla heeft verklaard dat ze van plan zijn om "add-ons die afhangen van XUL , XPCOM en XBL " af te schaffen . Hoewel niet alle bootstrapp-add-ons afhankelijk zijn van deze technologieën, bestaat de neiging dat bootstrapp-add-ons op een lager niveau werken dan Add-on SDK en WebExtension-add-ons. Daarom zullen ze deze technologieën vaker gebruiken. Hoewel er sommigen zijn die zeggen dat alle bootstrapped add-ons zijn gepland om te worden verouderd, is het niet duidelijk dat dit het geval is. Add-on SDK-extensies worden immers niet verouderd (tenzij ze require("chrome") , of anderszins afhankelijk zijn van XUL, XPCOM of XBL) en alle add-on SDK-extensies zijn bootstrapped-extensies, alleen met een SDK-wrapper .

  • Overlay / XUL / Legacy : [ verouderd; gepland voor verwijdering ] Deze add-ons bevatten een install.rdf- bestand dat de add-on beschrijft en een chrome.manifest- bestand om te beschrijven hoe de bestanden van de add-on zich verhouden tot (bijv. overlay) de bestanden van de toepassing. Hoe de add-on met de toepassing werkt, is volledig afhankelijk van de relaties die worden beschreven in het bestand chrome.manifest . De enige uitzonderingen hierop zijn enkele dingen zoals pictogrammen voor de extensie en het bestand met de opties van de extensie die worden aangegeven in het bestand install.rdf . Deze extensies werken op een zeer laag niveau met de applicatie (bijv. Firefox) samen. Hierdoor breken ze vaker wanneer wijzigingen in de toepassing worden aangebracht.

    Deze add-ons gebruiken XUL, HTML en CSS naast Javascript. Sommigen gebruiken ook XPCOM en XBL .

    Alle extensies Overlay / XUL / Legacy zijn gepland om te worden verouderd.

Andere soorten Firefox-add-ons

Wanneer de meeste mensen denken aan Firefox-add-ons, denken ze aan de hierboven beschreven extensies. Er zijn echter enkele aanvullende typen Firefox-add-ons:

Dit "voorbeeld" wordt voornamelijk, met enkele wijzigingen, overgenomen uit mijn antwoord van Makyen op een stackoverflow-vraag .
Sommige delen van deze inhoud zijn gekopieerd, of op zijn minst gebaseerd op, de add- onpagina op Mozilla Developer Network (MDN).
Dit werd oorspronkelijk geplaatst door Makyen in het gedeelte "Opmerkingen" van de firefox-addon-tag . Het werd vervolgens gewijzigd door Ondřej Doněk , die een extra "voor" verwijderde. In een enkele bewerking uitgevoerd door nus , werd het verplaatst van "Opmerkingen" naar een vastgemaakt "voorbeeld" met de titel "Inleiding". Helaas heeft dit ertoe geleid dat het systeem toeschrijvingsinformatie heeft verloren.

Een tijdelijke add-on installeren

Om een add-on die u ontwikkelt te testen, zult u deze waarschijnlijk tijdelijk in Firefox willen installeren. U kunt dit doen door het als tijdelijke add-on te laden . Om dit te doen:

  1. Ga naar about:debugging
  2. Klik op "Tijdelijke add-on laden"
  3. Navigeer in de bestandskiezer naar de map met de add-onbestanden
  4. Selecteer een bestand in de map
  5. Klik op "Openen"

De volgende animatie toont het laden van een add-on met de naam "aaaaaaaaaaaaaaaaaa - demo add-on" van about:debugging en dat de add-on dan verschijnt about:addons :

een tijdelijke add-on laden

Als tijdelijke add-on kunt u een niet-uitgepakte add-on laden (een map die alle bestanden voor de add-on bevat die u in een .xpi- bestand zou verpakken), of een add-on die is verpakt in een .xpi archief. Tijdelijke add-ons hoeven niet te worden ondertekend . Tijdelijke add-on blijft geïnstalleerd totdat deze handmatig wordt verwijderd of Firefox opnieuw wordt opgestart.

Mozilla-documentatie: tijdelijke installatie in Firefox

WebExtensions

WebExtensions kunnen worden geladen als tijdelijke add-ons. Dit kan worden gedaan met de add- onbestanden die ofwel zijn uitgepakt of verpakt in een .xpi- bestand.

Firefox add-on SDK

U kunt een Firefox Add-on SDK-extensie niet als tijdelijke add-on laden zonder deze eerst in een .xpi- bestand met jpm xpi . In het algemeen zult u jpm run gebruiken om uw SDK-extensie voor Firefox Add-on te testen.

De bestanden die meestal worden bewerkt voor een add-on SDK-extensie, vormen geen volledige extensie zonder dat enkele extra inpakfuncties en het bestand package.json wordt vertaald in een install.rdf- bestand en mogelijk een chrome.manifest- bestand. Dit proces verpakt de add-on SDK-extensie in een Bootstrap / Restartless-add-on, die wordt begrepen door Firefox. Zonder dit proces kan Firefox de add-on niet laden. Dit proces wordt uitgevoerd door jpm xpi resulterend in een ingepakt .xpi- bestand. Het uitvoeren van jpm run voert ook dit proces uit, maar slaat de resulterende bestanden op een tijdelijke locatie op en roept Firefox met de add-on geïnstalleerd.

Bootstrap / Restartless

Bootstrap / Restartless add-ons kunnen worden geladen als tijdelijke add-ons. Dit kan worden gedaan met de add- onbestanden die zijn uitgepakt of verpakt in een .xpi- bestand.

Legacy / Overlay / XUL

Legacy / Overlay / XUL-add-ons kunnen niet worden geladen als tijdelijke add-ons.

Add-ons installeren voor ontwikkeling

Add-ons kunnen worden geïnstalleerd als:

  1. Normale add-ons, die worden geïnstalleerd totdat ze worden verwijderd
  2. Tijdelijke add-ons (alleen extensies ): worden alleen geïnstalleerd totdat Firefox opnieuw wordt opgestart of kunnen eerder handmatig worden verwijderd.
  3. jpm run (alleen add-on SDK ): voert Firefox automatisch uit met een tijdelijk profiel terwijl uw add-on is geladen.
  4. web-ext run (alleen WebExtensions ): voert Firefox automatisch uit met een tijdelijk profiel met uw add-on geladen als een tijdelijke add-on. Controleert standaard uw extensiebestanden op wijzigingen en herlaadt automatisch uw extensie wanneer bestanden worden gewijzigd.

Normale add-ons

Het installeren van verpakte extensies (dat wil zeggen het .xpi bestand) kan eenvoudig zijn door het naar een Firefox-venster te slepen en neer te zetten met het profiel waarin u het wilt installeren. Ze kunnen ook rechtstreeks worden geïnstalleerd door de extensie van AMO te downloaden. Afhankelijk van wat uw doel is (één profiel, alle profielen, alle gebruikers, welk besturingssysteem, enz.), Zijn er andere opties voor het installeren van extensies .

Deze andere opties omvatten verschillende mappen buiten de map van het profiel waarin u het .xpi- bestand kunt plaatsen om het te laten installeren voor alle gebruikers van een bepaalde versie van Firefox, of alle profielen van een bepaalde gebruiker. In Windows kunt u ook een extensie installeren door een sleutel toe te voegen aan het Windows-register. Over het algemeen zijn deze andere mappen geen mappen waarin u een add-on zou installeren waarop u momenteel schrijft. Ze kunnen echter worden gebruikt om ervoor te zorgen dat u add-ons hebt die u gebruikt om uw testen / ontwikkeling te ondersteunen, geladen in een Firefox-profiel of Firefox-versie die u gebruikt. Door bijvoorbeeld een .xpi- bestand in <Firefox install directory>/browser/extensions , kunt u een extensie beschikbaar hebben, zelfs in het tijdelijke profiel dat is gemaakt door jpm run (gebruikt voor het testen van op Firefox Add-on SDK gebaseerde extensies).

Voor ontwikkeling / testen kunt u de extensie in elke map op uw lokale schijf hebben met behulp van een Firefox-proxybestand (maak een bestand met de naam <em:id> (in install.rdf voor Bootstrap / Restartless en Overlay / Legacy) in de extensiemap van het profiel met één regel met het volledige pad naar de map met de bestanden van de extensie). Extensies die op deze manier zijn geïnstalleerd, zijn vrijwel altijd niet ondertekend (zie hieronder). Deze methode is dus niet erg handig als u de extensie wilt installeren in een release- of bètaversie van Firefox.

Beperkingen bij het installeren van normale add-ons: Add-on Signing

Met het oog op een uitbreiding als een normale installatie van add-on in de release of Beta-versies van Firefox hoger dan of gelijk aan, versie 48, de uitbreiding moet worden ondertekend door Mozilla . Een extensie wordt ondertekend door deze in te dienen bij AMO . Nadat het is ondertekend, kan de extensie worden geïnstalleerd op elke versie van Firefox die wordt ondersteund. Voor Firefox-versies vóór versie 43 hoefden extensies niet te worden ondertekend door Mozilla. Andere typen add-ons dan extensies hoeven niet door Mozilla te worden ondertekend.

U kunt niet-ondertekende extensies als normale add-ons installeren in andere versies van Firefox (bijv. Firefox Developer Edition , Firefox Nightly , Unbranded Beta of Unbranded Release ) door xpinstall.signatures.required op false in about:config . Het instellen van deze optie was ook effectief in de versies 43-48 van Release en Beta Firefox. Het instellen van deze optie is niet effectief in versie- en bètaversies van Firefox vanaf versie 48.

U kunt het controleren van add-on-handtekeningen in Firefox echter in alle versies volledig uitschakelen, inclusief de release. Het antwoord op de Stack Overflow-vraag Hoe kan ik handtekeningcontrole voor Firefox-add-ons uitschakelen? beschrijft hoe dit te doen.

De noodzaak om niet-ondertekende add-ons te kunnen installeren voor ontwikkelingsdoeleinden is sterk verminderd door de beschikbaarheid van het installeren van extensies als tijdelijke add-ons . Tijdelijke add-ons hoeven niet te worden ondertekend en kunnen in elke huidige versie van Firefox worden geladen. Zoals de naam al aangeeft, is het belangrijkste nadeel van tijdelijke add-ons dat ze tijdelijk zijn. Ze moeten opnieuw worden geïnstalleerd wanneer Firefox opnieuw wordt gestart. Er zijn echter gevallen waarin het de voorkeur verdient om een add-on te installeren als een normale, maar niet-ondertekende add-on in plaats van als een tijdelijke add-on. Een add-on moet worden geïnstalleerd als een niet-ondertekende add-on als de add-on moet blijven geïnstalleerd, zelfs nadat Firefox opnieuw is opgestart. Dit kan om verschillende redenen wenselijk zijn, waaronder: testen op langere termijn of om te testen hoe de add-on werkt wanneer Firefox opstart.

Tijdelijke add-ons ( alleen extensies )

WebExtensions, Firefox op SDK gebaseerde extensies en Restartless / Bootstrap-extensies kunnen worden geïnstalleerd als tijdelijke add-ons vanaf about:debugging . Extensies kunnen worden geladen als tijdelijke add-ons in elke huidige versie van Firefox. Tijdelijke add-ons hoeven niet te worden ondertekend en kunnen worden geladen vanuit ofwel onverpakt (een map met bestanden), ofwel ingepakt (bijvoorbeeld een .xpi- bestand).

Zie Een tijdelijke add-on installeren voor gedetailleerde informatie over het tijdelijk installeren van extensies.

Niet-ondertekende add-ons installeren

Met het oog op een uitbreiding als een normale installatie van add-on in de release of Beta-versies van Firefox hoger dan of gelijk aan, versie 48, de uitbreiding moet worden ondertekend door Mozilla . Een extensie wordt ondertekend door deze in te dienen bij AMO . Nadat het is ondertekend, kan de extensie worden geïnstalleerd op elke versie van Firefox die wordt ondersteund. Voor Firefox-versies vóór versie 43 hoefden extensies niet te worden ondertekend door Mozilla. Andere typen add-ons dan extensies hoeven niet door Mozilla te worden ondertekend.

U kunt niet-ondertekende extensies als normale add-ons installeren in andere versies van Firefox (bijv. Firefox Developer Edition , Firefox Nightly , Unbranded Beta of Unbranded Release ) door xpinstall.signatures.required op false in about:config . Het instellen van deze optie was ook effectief in de versies 43-48 van Release en Beta Firefox. Het instellen van deze optie is niet effectief in versie- en bètaversies van Firefox vanaf versie 48.

De noodzaak om niet-ondertekende add-ons te kunnen installeren tijdens de ontwikkeling van add-ons is sterk verminderd door de beschikbaarheid van het installeren van extensies als tijdelijke add-ons . Tijdelijke add-ons hoeven niet te worden ondertekend en kunnen in elke huidige versie van Firefox worden geladen. Zoals de naam al aangeeft, is het belangrijkste nadeel van tijdelijke add-ons dat ze tijdelijk zijn. Ze moeten opnieuw worden geïnstalleerd wanneer Firefox opnieuw wordt gestart. Er zijn echter gevallen waarin het de voorkeur verdient om een add-on te installeren als een normale, maar niet-ondertekende add-on in plaats van als een tijdelijke add-on. Een add-on moet worden geïnstalleerd als een niet-ondertekende add-on als de add-on moet blijven geïnstalleerd, zelfs nadat Firefox opnieuw is opgestart. Dit kan om verschillende redenen wenselijk zijn, waaronder: testen op langere termijn of om te testen hoe de add-on werkt wanneer Firefox opstart.