Installazione delle estensioni su Linux

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

Creazione di pacchetti

Le estensioni e i temi vengono forniti come file .crx. Quando carichi 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 .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 "I tuoi schemi" e fai clic su "Altre informazioni". Nella finestra popup, fai clic sul link blu main.crx per scaricarlo.

Scaricare il file .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, poiché i contenuti dell'estensione verranno firmati dal Chrome Web Store. In questo modo è più facile rilevare potenziali attacchi e manomissioni.

Creare .crx localmente

Le directory delle estensioni vengono convertite in file .crx nella pagina di gestione delle estensioni. Vai a chrome://extensions/ nella omnibox o fai clic sul menu Chrome, passa il mouse sopra "Altri strumenti" e 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 CREA PACCHETTO ESTENSIONE.

La modalità sviluppatore è selezionata, quindi fai clic su Crea pacchetto estensione.

Specifica il percorso della cartella dell'estensione nel campo Directory principale dell'estensione e fai clic sul pulsante CREA PACCHETTO ESTENSIONE. Ignora il campo Chiave privata per un pacchetto alla prima creazione.

Specifica il percorso dell'estensione e poi fai clic su Comprimi estensione.

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

File di estensione pacchettizzati

Non perdere la chiave privata! Conserva il file .pem in un luogo segreto e sicuro; ti sarà necessario 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 PACCHETTO ESTENSIONE. Specifica il percorso della directory delle estensioni e la posizione della chiave privata.

Aggiornamento dei file di espansione

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

Aggiornamento dei file di espansione

Creare pacchetti tramite la riga di comando

Crea pacchetti di 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 un file installabile se è vera una delle seguenti condizioni:

  • Il file ha il tipo di contenuto application/x-chrome-extension
  • Il suffisso del file è .crx e sono vere 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"
    • "unknown/unknown"
    • "application/unknown"
    • "*/*"

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 contenuto sconosciuto, ovvero uno che 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.

Aggiornamento

Ogni poche ore, il browser controlla le estensioni installate per verificare la presenza di un URL di aggiornamento. Per ognuna, effettua una richiesta a quell'URL alla ricerca di un file XML manifest di aggiornamento.

  • Il contenuto restituito da un controllo degli aggiornamenti è un documento XML manifest di aggiornamento che elenca l'ultima versione di un'estensione.

Se il manifest di 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.

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

URL di aggiornamento

Le estensioni ospitate su server esterni al Chrome Web Store devono includere il update_url campo in loro manifest.json file.

{
  "name": "My extension",
  ...
  "update_url": "https://myhost.com/mytestextension/updates.xml",
  ...
}

Manifest di aggiornamento

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 delle estensioni utilizza i seguenti attributi per gli elementi <app> e <updatecheck> del manifest di aggiornamento:

appidL'ID estensione viene generato in base a un hash della chiave pubblica, come descritto nella creazione di pacchetti. L'ID di un'estensione viene visualizzato nella pagina di gestione delle estensioni
codebaseUn URL HTTPS del 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 di controllo degli aggiornamenti predefinita è di diverse ore, ma è possibile forzare un aggiornamento utilizzando il pulsante Aggiorna estensioni ora nella pagina di gestione delle estensioni.

Aggiorna le estensioni ora

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, consentendo di inserire un file XML statico su un qualsiasi server web semplice, come Apache, e di aggiornare il file XML quando vengono rilasciate nuove versioni dell'estensione.

Gli sviluppatori che ospitano più estensioni possono controllare i parametri di 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é un file XML statico.

Il formato dei parametri di richiesta è:

?x=EXTENSION_DATA

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

La richiesta di aggiornamento di ogni singola estensione sarà,

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 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 della richiesta GET (circa 2000 caratteri), il controllo degli aggiornamenti emette ulteriori richieste GET, se necessario.

Utilizzo avanzato: versione minima del browser

Man mano che vengono aggiunte altre API al sistema delle estensioni, è possibile rilasciare una versione aggiornata di un'estensione che funzionerà solo con le versioni più recenti del browser. Sebbene Google Chrome venga aggiornato automaticamente, potrebbero essere necessari alcuni giorni prima che la maggior parte della base utenti abbia eseguito 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 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.