Linux è l'unica piattaforma su cui gli utenti di Chrome possono installare estensioni ospitate al di fuori del
Chrome Web Store. Questo articolo descrive come pacchettizzare, 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 la sezione Hosting e aggiornamenti sul Web Store.
Pacchetto
Le estensioni e i temi vengono pubblicati come file .crx
. Durante il caricamento tramite la Dashboard per sviluppatori
di 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 il file .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 in "Le tue schede" e fai clic su "Altre informazioni". Nella
finestra popup, fai clic sul link main.crx
blu per scaricarlo.
Il file scaricato può essere ospitato su un server personale. Questo è il modo più sicuro per ospitare un'estensione localmente, in quanto i suoi contenuti saranno firmati dal Chrome Web Store. In questo modo, è possibile rilevare potenziali attacchi e manomissioni.
Creare un file .crx localmente
Le directory delle estensioni vengono convertite in file .crx
nella pagina Gestione delle estensioni. Vai a chrome://extensions/
nella omnibox oppure fai clic sul menu Chrome e tieni premuto il puntatore su "Altri strumenti", quindi seleziona "Estensioni".
Nella pagina di gestione delle estensioni, attiva la modalità sviluppatore facendo clic sul pulsante di attivazione/disattivazione accanto a Modalità sviluppatore. Quindi seleziona il pulsante ESTENSIONE PACCHETTO.
Specifica il percorso della cartella dell'estensione nel campo Directory principale dell'estensione e poi fai clic sul pulsante IMPACCHIGA L'ESTENSIONE. Ignora il campo Chiave privata per un pacchetto la prima volta.
Chrome creerà due file, un file .crx
e un file .pem
contenenti 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 PACCHIGA L'ESTENSIONE. Specifica il percorso della directory delle estensioni e la posizione della chiave privata.
La pagina fornirà il percorso dell'estensione in pacchetto aggiornata.
Pacchettizzazione tramite riga di comando
Impacchetta 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 una delle seguenti condizioni è vera:
- Il file ha il tipo di contenuto
application/x-chrome-extension
- Il suffisso del file è
.crx
e entrambe le seguenti condizioni sono vere:- Il file non viene pubblicato con l'intestazione HTTP
X-Content-Type-Options: nosniff
- Il file viene 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
. La seconda causa più comune è che il server invia un tipo di contenuto sconosciuto, che non è presente nell'elenco precedente. Per risolvere un problema relativo all'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 contengono un URL di aggiornamento. Per ognuno, invia una richiesta all'URL in questione cercando un file XML manifest di aggiornamento.
- I contenuti restituiti da un controllo dell'aggiornamento sono un documento XML manifest di aggiornamento che elenca la versione più recente 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 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 il 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 è stato 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 dell'aggiornamento:
- appid
- L'ID estensione viene generato in base a un hash della chiave pubblica, come descritto nella sezione Pacchettizzazione. 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
.crx
specificato dacodebase
. Deve corrispondere al valore di "version" nel filemanifest.json
del file.crx
.
Il file XML manifest di aggiornamento può contenere informazioni su più estensioni mediante più elementi <app>
.
Test
La frequenza di controllo degli aggiornamenti predefinita è 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 inserendo un file XML statico su qualsiasi server web semplice, come Apache, e aggiornandolo man mano che vengono rilasciate nuove versioni dell'estensione.
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 di aggiornare le estensioni dallo stesso URL che esegue un codice lato server dinamico anziché un file XML statico.
Il formato dei parametri di richiesta è:
?x=EXTENSION_DATA
dove EXTENSION_DATA
è una stringa con codifica URL del seguente formato:
id=EXTENSION_ID&v=EXTENSION_VERSION
Ad esempio, due estensioni rimandano allo stesso URL di aggiornamento (https://test.com/extension_updates.php
):
- Estensione 1
- ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
- Versione: "1.1"
- Estensione 2
- ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
- 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. Nell'esempio precedente, se un utente ha installato entrambe le estensioni, le due richieste vengono unite in un'unica 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 un URL della richiesta GET troppo lungo (oltre 2000 caratteri circa), il controllo dell'aggiornamento invia richieste GET aggiuntive, se necessario.
Utilizzo avanzato: versione minima del browser
Man mano che vengono aggiunte altre API al sistema delle estensioni, potrebbe essere rilasciata una versione aggiornata di un'estensione che funzionerà solo con le versioni più recenti del browser. Anche se Google Chrome stesso viene aggiornato automaticamente,
puoi essere necessario qualche giorno prima che la maggior parte della base di utenti abbia eseguito l'aggiornamento a una determinata nuova release. Per assicurarti che un determinato aggiornamento venga applicato solo alle versioni di Google Chrome uguali 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.