Installazione delle estensioni su Linux

Le estensioni ospitate al di fuori del Chrome Web Store possono essere installate solo da utenti Linux. Questo articolo descrive come pacchettizzare, ospitare e aggiornare i file .crx da un server personale. Se distribuisci un'estensione o un tema esclusivamente tramite il Chrome Web Store, consulta la sezione Hosting e aggiornamento del Webstore.

Presentazione

Le estensioni e i temi vengono pubblicati come file .crx. Durante il caricamento tramite la Dashboard per sviluppatori di Chrome , il file .crx viene creato automaticamente dalla dashboard. Se pubblicato su un server personale, il file .crx dovrà essere creato in locale o scaricato dal Chrome Web Store.

Scarica .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 "Ulteriori informazioni". Nella finestra popup, fai clic sul link blu main.crx per scaricarla.

Scarica .crx dalla Dashboard per sviluppatori

Il file scaricato può essere ospitato su un server personale. Questo è il modo più sicuro per ospitare un'estensione localmente, in quanto i contenuti dell'estensione verranno firmati dal Chrome Web Store. Ciò consente di rilevare potenziali attacchi e manomissioni.

Crea .crx in locale

Le directory delle estensioni vengono convertite in file .crx nella pagina di gestione delle estensioni. Vai a chrome://extensions/ nell'ominibox oppure fai clic sul menu Chrome, passa il mouse su "Altri strumenti" e seleziona "Estensioni".

Nella pagina di gestione delle estensioni, attiva la modalità sviluppatore facendo clic sull'opzione di attivazione/disattivazione accanto a Modalità sviluppatore. A questo punto, seleziona il pulsante COMPLETA ESTENSIONE.

È selezionata la modalità sviluppatore, quindi l'estensione Click Pack

Specifica il percorso della cartella dell'estensione nel campo Directory radice dell'estensione, quindi fai clic sul pulsante PACK EXTENSION. Ignora il campo Chiave privata per un pacchetto la prima volta.

Specifica il percorso dell'estensione e poi l'estensione Click Pack

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

File di estensioni in pacchetto

Non perdere la chiave privata. Conserva il file .pem in un luogo segreto e sicuro; sarà necessario aggiornare l'estensione.

Aggiornamento di 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 PACK EXTENSION. Specifica il percorso della directory delle estensioni e la posizione della chiave privata.

Aggiornamento dei file di estensione

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

Aggiornamento dei file di estensione

Crea pacchetto tramite riga di comando

Pacchetto delle 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

Hosting

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 installabile un file se si verifica una delle seguenti condizioni:

  • Il file ha il tipo di contenuti application/x-chrome-extension
  • Il suffisso del file è .crx e si verificano entrambe le seguenti condizioni:
    • 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"
    • "sconosciuto/sconosciuto"
    • "applicazione/sconosciuto"
    • "*/*"

Il motivo più comune per il mancato riconoscimento di un file installabile è l'invio dell'intestazione X-Content-Type-Options: nosniff da parte del server. Il secondo motivo più comune è che il server invia un tipo di contenuto sconosciuto, 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.

In fase di aggiornamento

A intervalli di alcune ore, il browser controlla se nelle estensioni installate è presente un URL di aggiornamento. Per ogni URL, invia una richiesta a quell'URL cercando un file XML manifest di aggiornamento.

  • I contenuti restituiti da un controllo degli aggiornamenti sono un documento XML manifest di aggiornamento che elenca la versione più recente di un'estensione.

Se il file manifest dell'aggiornamento fa riferimento a 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.

Nota: per garantire la privacy degli utenti, Google Chrome non invia intestazioni di cookie con richieste manifest di aggiornamento automatico e ignora eventuali intestazioni Set-Cookie nelle risposte a queste richieste.

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 manifest

Il manifest dell'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 file manifest dell'aggiornamento:

appidL'ID estensione viene generato in base a un hash della chiave pubblica, come descritto nella sezione pacchetti. L'ID di un'estensione viene visualizzato nella pagina di gestione delle estensioni.
codebaseUn URL HTTPS che rimanda al file .crx.
versioneUtilizzato dal client per determinare se deve scaricare il file .crx specificato da codebase. Deve corrispondere al valore di "version" nel file manifest.json del file .crx.

Il file XML manifest di aggiornamento può contenere informazioni su più estensioni includendo più elementi <app>.

Test

La frequenza predefinita del controllo degli aggiornamenti è di diverse ore, ma è possibile forzare un aggiornamento utilizzando il pulsante Aggiorna le estensioni ora nella pagina di gestione delle estensioni.

Aggiorna le estensioni ora

In questo modo verranno avviati i controlli di tutte le estensioni installate.

Utilizzo avanzato: parametri di richiesta

Il meccanismo di aggiornamento automatico di base è progettato per semplificare il lavoro lato server tanto quanto è sufficiente trascinare un file XML statico su un server web semplice, ad esempio Apache, e aggiornare il file XML ogni volta che vengono rilasciate nuove versioni delle estensioni.

Gli sviluppatori che ospitano più estensioni possono controllare i parametri della richiesta, che indicano l'ID estensione e la versione nella richiesta di aggiornamento. L'inclusione di questi parametri consente alle estensioni di aggiornarsi dallo stesso URL che esegue un codice dinamico lato server invece che da un file XML statico.

Il formato dei parametri della richiesta è:

?x=EXTENSION_DATA

Dove EXTENSION_DATA è una stringa con codifica URL del 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: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Versione: "0.4"

La richiesta di aggiornamento di ogni singola estensione è

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 ciascun 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 lungo da rendere l'URL di una richiesta GET troppo lungo (oltre 2000 caratteri circa), il controllo degli aggiornamenti emette richieste GET aggiuntive come necessario.

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 funzionerà solo con le versioni più recenti del browser. Anche se Google Chrome viene aggiornato automaticamente, possono essere necessari alcuni giorni prima che la maggior parte della base utenti esegua l'aggiornamento a una determinata nuova release. Per assicurarti che un determinato aggiornamento venga applicato solo alle versioni di Google Chrome corrispondenti o successive a una versione specifica, aggiungi l'attributo "prodversionmin" all'elemento nella risposta all'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 eseguono l'aggiornamento automatico alla versione 2 solo se eseguono Google Chrome 3.0.193.0 o versioni successive.