Linux è l'unica piattaforma in cui gli utenti di Chrome possono installare estensioni ospitate al di fuori del
Chrome Web Store. Questo articolo descrive come creare pacchetti, ospitare e aggiornare i file crx
da un server web generico. Se distribuisci un'estensione o un tema esclusivamente
tramite il Chrome Web Store, consulta Hosting e
aggiornamento del Web Store.
Pacchetto
Le estensioni e i temi vengono pubblicati come file .crx. Quando carichi tramite la dashboard
per sviluppatori Chrome, la dashboard crea automaticamente il file crx. Se pubblicato
su un server personale, il file crx dovrà essere creato localmente o scaricato dal Chrome
Web Store.
Scaricare .crx dal Chrome Web Store
Se un'estensione è ospitata sul Chrome Web Store, il file .crx può essere scaricato dalla
Dashboard per sviluppatori. Individua l'estensione nella sezione "Le tue schede" e fai clic su "Altre informazioni". Nella finestra
popup, fai clic sul link blu main.crx per scaricarlo.

Il file scaricato può essere ospitato su un server personale. Questo è il modo più sicuro per ospitare un'estensione localmente, poiché i contenuti dell'estensione verranno firmati dal Chrome Web Store. In questo modo è più facile rilevare potenziali attacchi e manomissioni.
Crea localmente il file .crx
Le directory delle estensioni vengono convertite in file .crx nella pagina Gestione estensioni. Vai a
chrome://extensions/ nella omnibox o fai clic sul menu Chrome, tieni il puntatore del mouse su "Altri strumenti" e poi
seleziona "Estensioni".
Nella pagina di gestione delle estensioni, attiva la modalità sviluppatore facendo clic sul pulsante di attivazione/disattivazione accanto a Modalità sviluppatore. A questo punto, seleziona il pulsante ESTENSIONE DEL PACCHETTO.

Specifica il percorso della cartella dell'estensione nel campo Directory radice dell'estensione, poi fai clic sul pulsante COMPRIME ESTENSIONE. Ignora il campo Chiave privata per un pacchetto alla prima pubblicazione.

Chrome creerà due file, un file .crx e un file .pem, che contiene la chiave privata dell'estensione.

Non perdere la chiave privata. Conserva il file .pem in un luogo segreto e sicuro. Ti servirà per aggiornare l'estensione.
Aggiornare un pacchetto .crx
Aggiorna il file .crx di un'estensione aumentando il numero di versione in manifest.json.
{
...
"version": "1.5",
...
}
}
{
...
"version": "1.6",
...
}
}
Torna alla pagina di gestione delle estensioni e fai clic sul pulsante CREA ESTENSIONE. Specifica il percorso della directory delle estensioni e la posizione della chiave privata.

La pagina fornirà il percorso dell'estensione in pacchetto aggiornata.

Pacchetto tramite riga di comando
Pacchettizza le estensioni nella riga di comando richiamando chrome.exe. Utilizza il flag --pack-extension per specificare la posizione della cartella dell'estensione e il flag --pack-extension-key per specificare la posizione del file della chiave privata dell'estensione.
chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem
Host
Un server che ospita file .crx deve utilizzare intestazioni HTTP appropriate per consentire agli utenti di installare l'estensione facendo clic su un link.
Google Chrome considera un file installabile se è vera una delle seguenti condizioni:
- Il file ha il tipo di contenuto
application/x-chrome-extension - Il suffisso del file è
.crxe entrambe le seguenti condizioni sono vere:- Il file non viene pubblicato con l'intestazione HTTP
X-Content-Type-Options: nosniff - Il file è pubblicato con uno dei seguenti tipi di contenuti:
- stringa vuota
"text/plain""application/octet-stream""unknown/unknown""application/unknown""\*/\*"
- Il file non viene pubblicato con l'intestazione HTTP
Il motivo più comune per cui non viene riconosciuto un file installabile è che il server invia l'intestazione X-Content-Type-Options: nosniff. Il secondo motivo più comune è che il server invia un tipo di contenuti sconosciuto, ovvero non presente nell'elenco precedente. Per risolvere un problema di intestazione HTTP, modifica la configurazione del server o prova a ospitare il file .crx su un altro server.
Aggiorna
Ogni poche ore, il browser controlla se le estensioni installate hanno un URL di aggiornamento. Per ciascuno, effettua una richiesta all'URL alla ricerca di un file XML manifest di aggiornamento.
- I contenuti restituiti da un controllo degli aggiornamenti sono un documento XML manifest di aggiornamento che elenca l'ultima versione di un'estensione.
Se il manifest dell'aggiornamento menziona una versione più recente di quella installata, il browser
scarica e installa la nuova versione. Come per gli aggiornamenti manuali, il nuovo file .crx deve essere firmato
con la stessa chiave privata della versione attualmente installata.
Aggiorna l'URL
Le estensioni ospitate su server esterni al Chrome Web Store devono includere il campo update_url nel file manifest.json.
{
"name": "My extension",
...
"update_url": "https://myhost.com/mytestextension/updates.xml",
...
}
Aggiorna manifest
Il manifest di aggiornamento restituito dal server deve essere un documento XML.
<?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>
Questo formato XML è preso in prestito da quello utilizzato da Omaha, l'infrastruttura di aggiornamento di Google. Il sistema
di estensioni utilizza i seguenti attributi per gli elementi <app> e <updatecheck> del
manifest di aggiornamento:
- appid
- L'ID estensione viene generato in base a un hash della chiave pubblica, come descritto nella sezione packaging. L'ID di un'estensione viene visualizzato nella pagina di gestione delle estensioni.
- codebase
- Un URL HTTPS al file
.crx. - versione
- Utilizzato dal client per determinare se deve scaricare il file
.crxspecificato dacodebase. Deve corrispondere al valore di "version" nel filemanifest.jsondel file.crx.
Il file XML del manifest di aggiornamento può contenere informazioni su più estensioni includendo più elementi
<app>.
Test
La frequenza predefinita di controllo degli aggiornamenti è di diverse ore, ma è possibile forzare un aggiornamento utilizzando il pulsante Aggiorna ora le estensioni nella pagina di gestione delle estensioni.

Verranno avviati i controlli per tutte le estensioni installate.
Utilizzo avanzato: parametri di richiesta
Il meccanismo di aggiornamento automatico di base è progettato per semplificare il lavoro lato server come il semplice rilascio di un file XML statico su un qualsiasi server web semplice, come Apache, e l'aggiornamento di questo file XML man mano che vengono rilasciate nuove versioni delle estensioni.
Gli sviluppatori che ospitano più estensioni possono controllare i parametri della richiesta, che indicano l'ID e la versione dell'estensione nella richiesta di aggiornamento. L'inclusione di questi parametri consente alle estensioni di aggiornarsi dallo stesso URL che esegue codice lato server dinamico anziché da un file XML statico.
Il formato dei parametri della richiesta è:
?x=EXTENSION_DATA
dove EXTENSION_DATA è una stringa con codifica URL nel formato:
id=EXTENSION_ID&v=EXTENSION_VERSION
Ad esempio, due estensioni puntano allo stesso URL di aggiornamento (https://test.com/extension_updates.php):
- Estensione 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versione: "1.1"
- Estensione 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- Versione: "0.4"
La richiesta di aggiornamento di ogni singola estensione sarebbe:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1
e
https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
È possibile elencare più estensioni in una singola richiesta per ogni URL di aggiornamento univoco. Per l'esempio precedente, se un utente ha installato entrambe le estensioni, le due richieste vengono unite in una singola richiesta:
https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4
Se il numero di estensioni installate che utilizzano lo stesso URL di aggiornamento è sufficientemente elevato da rendere troppo lungo l'URL di una richiesta GET (oltre 2000 caratteri circa), il controllo degli aggiornamenti invia ulteriori richieste GET in base alle necessità.
Utilizzo avanzato: versione minima del browser
Man mano che vengono aggiunte altre API al sistema di estensioni, potrebbe essere rilasciata una versione aggiornata di un'estensione che funziona
solo con le versioni più recenti del browser. Sebbene Google Chrome venga aggiornato automaticamente,
possono essere necessari alcuni giorni prima che la maggior parte della base utenti esegua l'aggiornamento a una nuova uscita. Per
assicurarti che un determinato aggiornamento venga applicato solo alle versioni di Google Chrome pari o superiori a una versione
specifica, aggiungi l'attributo "prodversionmin" all'elemento <app> nella risposta di aggiornamento.
<?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>
In questo modo, gli utenti eseguiranno l'aggiornamento automatico alla versione 2 solo se utilizzano Google Chrome 3.0.193.0 o versioni successive.