Erweiterungen unter Linux installieren

Erweiterungen, die außerhalb des Chrome Web Store gehostet werden, können nur von Linux-Nutzern installiert werden. In diesem Artikel wird beschrieben, wie Sie .crx-Dateien auf einem persönlichen Server verpacken, hosten und aktualisieren können. Wenn Sie eine Erweiterung oder ein Design ausschließlich über den Chrome Web Store vertreiben, lesen Sie Webstore-Hosting und -Aktualisierung.

Verpackung

Erweiterungen und Designs werden als .crx-Dateien bereitgestellt. Beim Upload über das Entwickler-Dashboard von Google Chrome wird im Dashboard automatisch die Datei .crx erstellt. Wenn die Datei .crx auf einem persönlichen Server veröffentlicht wird, muss sie lokal erstellt oder aus dem Chrome Web Store heruntergeladen werden.

CRX-Datei aus dem Chrome Web Store herunterladen

Wenn eine Erweiterung im Chrome Web Store gehostet wird, kann die Datei .crx aus dem Entwickler-Dashboard heruntergeladen werden. Suchen Sie unter „Meine Einträge“ nach der Erweiterung und klicken Sie auf „Weitere Informationen“. Klicken Sie im Pop-up-Fenster auf den blauen Link main.crx, um ihn herunterzuladen.

CRX vom Entwickler-Dashboard herunterladen

Die heruntergeladene Datei kann auf einem persönlichen Server gehostet werden. Dies ist die sicherste Methode, eine Erweiterung lokal zu hosten, da der Inhalt der Erweiterung vom Chrome Web Store signiert wird. Dies hilft, potenzielle Angriffe und Manipulationen zu erkennen.

CRX lokal erstellen

Erweiterungsverzeichnisse werden auf der Seite zur Verwaltung von Erweiterungen in .crx-Dateien konvertiert. Gehen Sie in der Ominibox zu chrome://extensions/ oder klicken Sie auf das Chrome-Menü, bewegen Sie den Mauszeiger auf „Weitere Tools“ und wählen Sie „Erweiterungen“ aus.

Aktivieren Sie auf der Seite zur Verwaltung von Erweiterungen den Entwicklermodus, indem Sie auf die Ein-/Aus-Schaltfläche neben Entwicklermodus klicken. Wählen Sie dann die Schaltfläche PACK ERWEITERUNG aus.

"Entwicklermodus" aktiviert, dann "Click Pack"-Erweiterung auswählen

Geben Sie im Feld für das Stammverzeichnis der Erweiterung den Pfad zum Ordner der Erweiterung an und klicken Sie dann auf die Schaltfläche PACK ERWEITERUNG. Ignorieren Sie das Feld Privater Schlüssel beim ersten Paket.

Erweiterungspfad und dann Klickpaket-Erweiterung angeben

Chrome erstellt zwei Dateien, eine .crx-Datei und eine .pem-Datei, die den privaten Schlüssel der Erweiterung enthält.

Gepackte Erweiterungsdateien

Verlieren Sie den privaten Schlüssel nicht. Bewahren Sie die Datei .pem an einem geheimen und sicheren Ort auf. Dazu muss die Erweiterung aktualisiert werden.

CRX-Paket aktualisieren

Erhöhen Sie die .crx-Datei einer Erweiterung, indem Sie die Versionsnummer in manifest.json erhöhen.

{
  ...
  "version": "1.5",
  ...
  }
}
{
  ...
  "version": "1.6",
  ...
  }
}

Kehren Sie zur Verwaltungsseite für Erweiterungen zurück und klicken Sie auf die Schaltfläche PACK-ERWEITERUNG. Geben Sie den Pfad zum Erweiterungsverzeichnis und den Speicherort des privaten Schlüssels an.

Erweiterungsdateien aktualisieren

Die Seite enthält den Pfad für die aktualisierte gepackte Erweiterung.

Erweiterungsdateien aktualisieren

Über die Befehlszeile verpacken

Verpacken Sie Erweiterungen in der Befehlszeile, indem Sie chrome.exe aufrufen. Verwenden Sie das Flag --pack-extension, um den Speicherort des Ordners der Erweiterung anzugeben, und das Flag --pack-extension-key, um den Speicherort der privaten Schlüsseldatei der Erweiterung anzugeben.

chrome.exe --pack-extension=C:\myext --pack-extension-key=C:\myext.pem

Hosting

Ein Server, auf dem .crx-Dateien gehostet werden, muss geeignete HTTP-Header verwenden, damit Nutzer die Erweiterung durch Klicken auf einen Link installieren können.

In Google Chrome gilt eine Datei als installierbar, wenn eine der folgenden Bedingungen zutrifft:

  • Die Datei hat den Inhaltstyp application/x-chrome-extension.
  • Das Dateisuffix lautet .crx und beide der folgenden Bedingungen sind erfüllt:
    • Die Datei wird nicht mit dem HTTP-Header X-Content-Type-Options: nosniff bereitgestellt
    • Die Datei wird mit einem der folgenden Inhaltstypen bereitgestellt:
    • Leerer String
    • "text/plain"
    • "application/octet-stream"
    • „unbekannt/unbekannt“
    • "Anwendung/unbekannt"
    • "*/*"

Der häufigste Grund dafür, dass eine installierbare Datei nicht erkannt wird, ist, dass der Server den Header X-Content-Type-Options: nosniff sendet. Der zweithäufigste Grund ist, dass der Server einen unbekannten Inhaltstyp sendet, der sich nicht in der vorherigen Liste befindet. Um ein HTTP-Header-Problem zu beheben, ändern Sie entweder die Konfiguration des Servers oder hosten Sie die Datei .crx auf einem anderen Server.

Wird aktualisiert

Alle paar Stunden prüft der Browser, ob installierte Erweiterungen eine Update-URL haben. Für jede Datei wird eine Anfrage an diese URL gestellt und nach einer Manifest-XML-Datei für die Aktualisierung gesucht.

  • Der von einer Updateprüfung zurückgegebene Inhalt ist ein XML-Dokument mit dem Update-Manifest, das die neueste Version einer Erweiterung auflistet.

Wenn im Manifest der Aktualisierung eine neuere Version als installiert angegeben ist, lädt der Browser die neue Version herunter und installiert sie. Wie bei manuellen Updates muss die neue .crx-Datei mit demselben privaten Schlüssel wie die aktuell installierte Version signiert werden.

Hinweis:Aus Datenschutzgründen sendet Google Chrome keine Cookie-Header mit Manifestanfragen zur automatischen Aktualisierung und ignoriert Set-Cookie-Header in den Antworten auf diese Anfragen.

URL aktualisieren

Für Erweiterungen, die auf Servern außerhalb des Chrome Web Stores gehostet werden, muss das Feld update_url in der Datei manifest.json enthalten sein.

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

Manifest aktualisieren

Das vom Server zurückgegebene Update-Manifest sollte ein XML-Dokument sein.

<?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>

Dieses XML-Format wurde von Omaha übernommen, der Update-Infrastruktur von Google. Das Erweiterungssystem verwendet die folgenden Attribute für die Elemente <app> und <updatecheck> des Updatemanifests:

appidDie Erweiterungs-ID wird anhand eines Hashwerts des öffentlichen Schlüssels generiert, wie unter Verpackung beschrieben. Die ID einer Erweiterung wird auf der Seite zur Verwaltung von Erweiterungen angezeigt.
CodebasisEine HTTPS-URL zur Datei .crx.
VersionWird vom Client verwendet, um zu bestimmen, ob die durch codebase angegebene Datei .crx heruntergeladen werden soll. Er sollte dem Wert unter „Version“ in der Datei manifest.json der Datei .crx entsprechen.

Die XML-Datei des Aktualisierungsmanifests kann durch die Angabe mehrerer <app>-Elemente Informationen zu mehreren Erweiterungen enthalten.

Testen

Standardmäßig werden Updates nach mehreren Stunden gesucht. Ein Update kann jedoch auf der Seite zur Verwaltung von Erweiterungen über die Schaltfläche Erweiterungen jetzt aktualisieren erzwungen werden.

Erweiterungen jetzt aktualisieren

Dadurch wird die Prüfung auf alle installierten Erweiterungen gestartet.

Fortgeschrittene Verwendung: Anfrageparameter

Der grundlegende Mechanismus zur automatischen Aktualisierung wurde so konzipiert, dass die serverseitige Arbeit genauso einfach ist wie das Ablegen einer statischen XML-Datei auf einem reinen Webserver wie Apache und das Aktualisieren dieser XML-Datei, sobald neue Erweiterungsversionen veröffentlicht werden.

Entwickler, die mehrere Erweiterungen hosten, können Anfrageparameter prüfen, die in der Aktualisierungsanfrage die Erweiterungs-ID und die Version angeben. Die Angabe dieser Parameter ermöglicht, dass Erweiterungen von derselben URL aus aktualisiert werden, wenn dynamischer serverseitiger Code ausgeführt wird anstatt über eine statische XML-Datei.

Das Format der Anfrageparameter lautet:

?x=EXTENSION_DATA

Dabei ist EXTENSION_DATA ein URL-codierter String im folgenden Format:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

Beispiel: Zwei Erweiterungen verweisen auf dieselbe Update-URL (https://test.com/extension_updates.php):

  • Erweiterung 1
    • ID: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa“
    • Version: „1.1“
  • Erweiterung 2
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Version: „0.4“

Die Anfrage zur Aktualisierung der einzelnen Erweiterungen lautet:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1

und

https://test.com/extension_updates.php?x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

In einer Anfrage können für jede eindeutige Update-URL mehrere Erweiterungen aufgelistet werden. Wenn im obigen Beispiel ein Nutzer beide Erweiterungen installiert hat, werden die beiden Anfragen zu einer einzigen Anfrage zusammengeführt:

https://test.com/extension_updates.php?x=id%3Daaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa%26v%3D1.1&x=id%3Dbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb%26v%3D0.4

Wenn die Anzahl der installierten Erweiterungen mit derselben Update-URL groß genug ist, sodass eine GET-Anfrage-URL zu lang ist (mehr als 2.000 Zeichen), gibt die Updateprüfung bei Bedarf zusätzliche GET-Anfragen aus.

Erweiterte Nutzung: Mindestversion des Browsers

Wenn dem Erweiterungssystem weitere APIs hinzugefügt werden, wird möglicherweise eine aktualisierte Version einer Erweiterung veröffentlicht, die nur mit neueren Versionen des Browsers funktioniert. Obwohl Google Chrome automatisch aktualisiert wird, kann es einige Tage dauern, bis die Mehrheit der Nutzer ein Update auf eine bestimmte neue Version durchgeführt hat. Um sicherzustellen, dass ein bestimmtes Update nur auf Google Chrome-Versionen angewendet wird, die mindestens einer bestimmten Version entsprechen, fügen Sie dem -Element in der Update-Antwort das Attribut "prodversionmin" hinzu.

<?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>

Dadurch wird sichergestellt, dass Nutzer nur dann automatisch auf Version 2 aktualisiert werden, wenn sie Google Chrome 3.0.193.0 oder höher ausführen.