Linux is het enige platform waarop Chrome-gebruikers extensies kunnen installeren die buiten de Chrome Web Store worden gehost. In dit artikel wordt beschreven hoe u crx
-bestanden vanaf een algemene webserver kunt verpakken, hosten en bijwerken. Als u een extensie of thema uitsluitend via de Chrome Web Store distribueert, raadpleeg dan Webstore hosting en updates .
Pakket
Extensies en thema's worden aangeboden als .crx
-bestanden. Wanneer u uploadt via het Chrome Developer Dashboard , maakt het dashboard automatisch het crx
-bestand aan. Als het crx
bestand op een persoonlijke server wordt gepubliceerd, moet het lokaal worden gemaakt of worden gedownload via de Chrome Web Store.
Download .crx uit de Chrome Web Store
Als een extensie wordt gehost in de Chrome Web Store, kan het .crx
bestand worden gedownload via het ontwikkelaarsdashboard. Zoek de extensie onder 'Uw vermeldingen' en klik op 'Meer informatie'. Klik in het pop-upvenster op de blauwe link main.crx
om deze te downloaden.
Het gedownloade bestand kan worden gehost op een persoonlijke server. Dit is de veiligste manier om een extensie lokaal te hosten, aangezien de inhoud van de extensie wordt ondertekend door de Chrome Web Store. Dit helpt bij het detecteren van potentiële aanvallen en geknoei.
Maak lokaal .crx
Extensiemappen worden geconverteerd naar .crx
bestanden op de Extensiebeheerpagina. Navigeer naar chrome://extensions/
in de omnibox, of klik op het Chrome-menu, houd de aanwijzer boven 'Meer tools' en selecteer vervolgens 'Extensies'.
Schakel op de pagina Extensiebeheer de ontwikkelaarsmodus in door op de tuimelschakelaar naast Ontwikkelaarsmodus te klikken. Selecteer vervolgens de knop PACK EXTENSION .
Geef het pad naar de map van de extensie op in het veld Extensiehoofdmap en klik vervolgens op de knop PACK EXTENSION . Negeer het veld Privésleutel voor een nieuw pakket.
Chrome maakt twee bestanden, een .crx
bestand en een .pem
bestand, dat de privésleutel van de extensie bevat.
Verlies de privésleutel niet! Bewaar het .pem
-bestand op een geheime en veilige plaats; het zal nodig zijn om de extensie bij te werken .
Update een .crx-pakket
Update het .crx
bestand van een extensie door het versienummer in manifest.json
te verhogen.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Keer terug naar de Extensiebeheerpagina en klik op de knop PACK EXTENSION . Geef het pad naar de map met extensies en de locatie van de persoonlijke sleutel op.
De pagina geeft het pad voor de bijgewerkte verpakte extensie weer.
Verpakken via de opdrachtregel
Verpak extensies op de opdrachtregel door chrome.exe
aan te roepen. Gebruik de vlag --pack-extension
om de locatie van de map van de extensie op te geven en de vlag --pack-extension-key
om de locatie van het privésleutelbestand van de extensie op te geven.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Gastheer
Een server die .crx
bestanden host, moet de juiste HTTP-headers gebruiken zodat gebruikers de extensie kunnen installeren door op een link te klikken.
Google Chrome beschouwt een bestand als installeerbaar als een van de volgende situaties van toepassing is:
- Het bestand heeft het inhoudstype
application/x-chrome-extension
- Het bestandsachtervoegsel is
.crx
en beide volgende zijn waar:- Het bestand wordt niet aangeboden met de HTTP-header
X-Content-Type-Options: nosniff
- Het bestand wordt geleverd met een van de volgende inhoudstypen:
- lege tekenreeks
-
"text/plain"
-
"application/octet-stream"
-
"unknown/unknown"
-
"application/unknown"
-
"\*/\*"
- Het bestand wordt niet aangeboden met de HTTP-header
De meest voorkomende reden voor het niet herkennen van een installeerbaar bestand is dat de server de header X-Content-Type-Options: nosniff
verzendt. De tweede meest voorkomende reden is dat de server een onbekend inhoudstype verzendt, een type dat niet in de vorige lijst staat. Om een HTTP-headerprobleem op te lossen, wijzigt u de configuratie van de server of probeert u het .crx
bestand op een andere server te hosten.
Update
Elke paar uur controleert de browser geïnstalleerde extensies op een update-URL. Voor elke URL wordt een verzoek ingediend bij de URL, op zoek naar een XML-updatemanifestbestand.
- De inhoud die door een updatecontrole wordt geretourneerd, is een XML-document met een updatemanifest waarin de nieuwste versie van een extensie wordt vermeld.
Als het updatemanifest een versie vermeldt die recenter is dan de geïnstalleerde versie, downloadt en installeert de browser de nieuwe versie. Net als bij handmatige updates moet het nieuwe .crx
bestand worden ondertekend met dezelfde privésleutel als de momenteel geïnstalleerde versie.
Update-URL
Extensies die worden gehost op servers buiten de Chrome Webstore moeten het veld update_url
in hun manifest.json
bestand bevatten.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Update manifest
Het updatemanifest dat door de server wordt geretourneerd, moet een XML-document zijn.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='https://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
</app>
</gupdate>
Dit XML-formaat is ontleend aan het formaat dat wordt gebruikt door Omaha , de update-infrastructuur van Google. Het extensiesysteem gebruikt de volgende kenmerken voor de <app>
en <updatecheck>
-elementen van het updatemanifest:
- appid
- De extensie-ID wordt gegenereerd op basis van een hash van de openbare sleutel, zoals beschreven in package . De ID van een extensie wordt weergegeven op de pagina Extensiebeheer.
- codebasis
- Een HTTPS-URL naar het
.crx
bestand. - versie
- Wordt door de client gebruikt om te bepalen of het door
codebase
gespecificeerde.crx
bestand moet worden gedownload. Het moet overeenkomen met de waarde van 'version' in hetmanifest.json
bestand van het.crx
bestand.
Het XML-bestand van het updatemanifest kan informatie bevatten over meerdere extensies door meerdere <app>
-elementen op te nemen.
Testen
De standaardfrequentie voor updatecontrole is enkele uren, maar een update kan worden geforceerd met behulp van de knop Extensies nu bijwerken op de pagina Extensiebeheer.
Hierdoor worden de controles voor alle geïnstalleerde extensies gestart.
Geavanceerd gebruik: parameters opvragen
Het basismechanisme voor automatisch bijwerken is ontworpen om het werk op de server net zo eenvoudig te maken als het plaatsen van een statisch XML-bestand op een gewone webserver, zoals Apache, en het bijwerken van dat XML-bestand zodra er nieuwe extensieversies worden uitgebracht.
Ontwikkelaars die meerdere extensies hosten, kunnen de aanvraagparameters controleren, die de extensie-ID en -versie in het updateverzoek aangeven. Door deze parameters op te nemen, kunnen extensies worden bijgewerkt vanaf dezelfde URL met dynamische code aan de serverzijde in plaats van een statisch XML-bestand.
Het formaat van de aanvraagparameters is:
?x=EXTENSION_DATA
Waar EXTENSION_DATA
een URL-gecodeerde tekenreeks is met de indeling:
id=EXTENSION_ID&v=EXTENSION_VERSION
Twee extensies verwijzen bijvoorbeeld naar dezelfde update-URL ( https://test.com/extension_updates.php
):
- Uitbreiding 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versie: "1.1"
- Uitbreiding 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versie: "0.4"
Het verzoek om elke individuele extensie bij te werken zou zijn:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
En
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Voor elke unieke update-URL kunnen meerdere extensies in één verzoek worden vermeld. Als in het vorige voorbeeld een gebruiker beide extensies heeft geïnstalleerd, worden de twee verzoeken samengevoegd tot één verzoek:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Als het aantal geïnstalleerde extensies dat dezelfde update-URL gebruikt zo groot is dat een GET-verzoek-URL te lang is (meer dan 2000 tekens of zo), geeft de updatecontrole zo nodig aanvullende GET-verzoeken uit.
Geavanceerd gebruik: minimale browserversie
Naarmate er meer API's aan het extensiesysteem worden toegevoegd, kan er een bijgewerkte versie van een extensie worden uitgebracht die alleen met nieuwere versies van de browser werkt. Hoewel Google Chrome zelf automatisch wordt bijgewerkt, kan het een paar dagen duren voordat het merendeel van het gebruikersbestand is bijgewerkt naar een bepaalde nieuwe release. Om ervoor te zorgen dat een bepaalde update alleen van toepassing is op Google Chrome-versies van of hoger dan een specifieke versie, voegt u het kenmerk 'prodversionmin' toe aan het <app>
-element in het updateantwoord.
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'>
<updatecheck codebase='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' prodversionmin='3.0.193.0'/>
</app>
</gupdate>
Dit zou ervoor zorgen dat gebruikers alleen automatisch naar versie 2 zouden updaten als ze Google Chrome 3.0.193.0 of hoger gebruiken.