Extensies die buiten de Chrome Web Store worden gehost, kunnen alleen door Linux-gebruikers worden geïnstalleerd. Dit artikel beschrijft hoe u .crx -bestanden vanaf een eigen server kunt verpakken, hosten en bijwerken. Als u een extensie of thema uitsluitend via de Chrome Web Store distribueert, raadpleeg dan Webstore Hosting and Updating .
Verpakking
Extensies en thema's worden aangeboden als .crx -bestanden. Bij het uploaden via het Chrome Developer Dashboard wordt het .crx bestand automatisch aangemaakt. Als de extensie op een persoonlijke server wordt gepubliceerd, moet het .crx bestand lokaal worden aangemaakt of gedownload vanuit de Chrome Web Store.
Download het .crx-bestand vanuit de Chrome Web Store.
Als een extensie in de Chrome Web Store wordt gehost, 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 het bestand te downloaden.

Het gedownloade bestand kan op een persoonlijke server worden gehost. Dit is de veiligste manier om een extensie lokaal te hosten, omdat de inhoud van de extensie wordt ondertekend door de Chrome Web Store. Dit helpt bij het detecteren van potentiële aanvallen en manipulatie.
Maak lokaal een .crx-bestand aan.
Extensiemappen worden op de pagina Extensiebeheer omgezet naar .crx bestanden. Ga naar chrome://extensions/ in de ominibox of klik op het Chrome-menu, beweeg de muis over 'Meer tools' en selecteer 'Extensies'.
Schakel op de pagina Extensiebeheer de ontwikkelaarsmodus in door op de schakelaar naast 'Ontwikkelaarsmodus' te klikken. Selecteer vervolgens de knop 'EXTENSIE INPAKKEN' .

Geef het pad naar de map van de extensie op in het veld 'Extension root directory' en klik vervolgens op de knop 'PACK EXTENSION' . Negeer het veld 'Private key' bij een eerste keer verpakken.

Chrome maakt twee bestanden aan: 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 plek; u heeft het nodig om de extensie bij te werken .
Een .crx-pakket bijwerken
Werk het .crx -bestand van een extensie bij door het versienummer in manifest.json te verhogen.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Ga terug naar de pagina Extensiebeheer en klik op de knop EXTENSIE INPAKKEN . Geef het pad naar de extensiemap en de locatie van de privésleutel op.

Op deze pagina vindt u het pad naar de bijgewerkte extensie.

Pakket via de commandoregel
Verpak extensies via de commandoregel door chrome.exe aan te roepen. Gebruik de vlag --pack-extension om de locatie van de extensiemap 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
Hosting
Een server die .crx -bestanden host, moet de juiste HTTP-headers gebruiken om gebruikers in staat te stellen de extensie te installeren door op een link te klikken.
Google Chrome beschouwt een bestand als installeerbaar als aan een van de volgende voorwaarden is voldaan:
- Het bestand heeft het inhoudstype
application/x-chrome-extension - De bestandsextensie is
.crxen aan beide onderstaande voorwaarden is voldaan:- Het bestand wordt niet aangeboden met de HTTP-header
X-Content-Type-Options: nosniff - Het bestand wordt aangeboden met een van de volgende inhoudstypen:
- lege tekenreeks
- "tekst/plain"
- "applicatie/octet-stream"
- "onbekend/onbekend"
- "applicatie/onbekend"
- "*/*"
- Het bestand wordt niet aangeboden met de HTTP-header
De meest voorkomende reden waarom een installeerbaar bestand niet wordt herkend, is dat de server de header X-Content-Type-Options: nosniff verzendt. De op één na meest voorkomende reden is dat de server een onbekend contenttype verzendt – een type dat niet in de bovenstaande lijst staat. Om een probleem met een HTTP-header op te lossen, kunt u de serverconfiguratie wijzigen of proberen het .crx bestand op een andere server te hosten.
Bijwerken
De browser controleert elke paar uur de geïnstalleerde extensies op een update-URL. Voor elke extensie stuurt de browser een verzoek naar die URL om te zoeken naar een XML-manifestbestand met een update.
- De inhoud die wordt geretourneerd door een updatecontrole is een XML-document met een updatemanifest waarin de nieuwste versie van een extensie wordt vermeld.
Als in het updatemanifest een versie wordt vermeld die nieuwer 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 gehost worden op servers buiten de Chrome Webstore moeten het veld update_url in hun manifest.json -bestand opnemen.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Manifest bijwerken
Het updatemanifest dat door de server wordt teruggestuurd, 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 overgenomen van het formaat dat gebruikt wordt door Omaha , de update-infrastructuur van Google. Het extensiesysteem gebruikt de volgende attributen voor de <app> en <updatecheck> elementen van het updatemanifest:
| appid | De extensie-ID wordt gegenereerd op basis van een hash van de publieke sleutel, zoals beschreven in de documentatie over het verpakken . De ID van een extensie wordt weergegeven op de pagina Extensies beheren. |
| codebase | Een HTTPS-URL naar het .crx bestand. |
| versie | Wordt door de client gebruikt om te bepalen of het .crx bestand, gespecificeerd door codebase , gedownload moet worden. De waarde moet overeenkomen met de waarde van "version" in het manifest.json bestand van het .crx bestand. |
Het XML-bestand met het updatemanifest kan informatie over meerdere extensies bevatten door meerdere <app>-elementen op te nemen.
Testen
De standaardfrequentie voor het controleren op updates is enkele uren, maar een update kan worden geforceerd met de knop 'Extensies nu bijwerken' op de pagina 'Extensies beheren'.

Hiermee worden alle geïnstalleerde extensies gecontroleerd.
Geavanceerd gebruik: verzoekparameters
Het basismechanisme voor automatische updates is ontworpen om het serverwerk zo eenvoudig mogelijk te maken: je hoeft alleen maar een statisch XML-bestand op een willekeurige webserver, zoals Apache, te plaatsen en dat XML-bestand bij te werken zodra er nieuwe versies van een extensie beschikbaar komen.
Ontwikkelaars die meerdere extensies hosten, kunnen de verzoekparameters controleren die de extensie-ID en -versie in het updateverzoek aangeven. Door deze parameters op te nemen, kunnen extensies vanaf dezelfde URL worden bijgewerkt met dynamische servercode in plaats van een statisch XML-bestand.
De aanvraagparameters hebben de volgende structuur:
?x=EXTENSION_DATA
Waarbij EXTENSION_DATA een URL-gecodeerde tekenreeks is in de volgende 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 afzonderlijke extensie bij te werken zou als volgt luiden:
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. In het bovenstaande voorbeeld worden de twee verzoeken samengevoegd tot één verzoek als een gebruiker beide extensies heeft geïnstalleerd.
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 wordt (meer dan 2000 tekens), verstuurt de updatecontrole indien nodig extra GET-verzoeken.
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 werkt met nieuwere versies van de browser. Hoewel Google Chrome zelf automatisch wordt bijgewerkt, kan het een paar dagen duren voordat de meeste gebruikers een bepaalde nieuwe versie hebben geïnstalleerd. Om ervoor te zorgen dat een update alleen van toepassing is op Google Chrome-versies van een specifieke versie of hoger, voegt u het attribuut "prodversionmin" toe aan de extensie.
<?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 zorgt ervoor dat gebruikers alleen automatisch naar versie 2 updaten als ze Google Chrome 3.0.193.0 of hoger gebruiken.