Selfhost für Linux

Linux ist die einzige Plattform, auf der Chrome-Nutzer Erweiterungen installieren können, die außerhalb des Chrome Web Store herunterladen. In diesem Artikel wird beschrieben, wie Sie crx verpacken, hosten und aktualisieren. von einem Allzweck-Webserver. Wenn Sie ausschließlich eine Erweiterung oder ein Design anbieten Chrome Web Store erhalten, finden Sie unter Webstore-Hosting und wird aktualisiert.

Paket

Erweiterungen und Designs werden als .crx-Dateien bereitgestellt. Wenn Sie den Upload über den Chrome Developer Dashboard verwenden, erstellt das Dashboard automatisch die Datei crx. Falls veröffentlicht Auf einem persönlichen Server muss die Datei crx lokal erstellt oder von Chrome heruntergeladen werden Web Store

CRX aus dem Chrome Web Store herunterladen

Wenn eine Erweiterung im Chrome Web Store gehostet wird, kann die Datei .crx aus dem Entwickler-Dashboard Suchen Sie die Erweiterung unter „Meine Einträge“. und klicken Sie auf „Weitere Infos“. Im Pop-up-Fenster öffnen möchten, klicken Sie zum Herunterladen auf den blauen Link main.crx.

CRX-Datei aus dem Entwickler-Dashboard herunterladen

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

CRX lokal erstellen

Erweiterungsverzeichnisse werden auf der Seite zur Verwaltung von Erweiterungen in .crx-Dateien konvertiert. Navigieren zu chrome://extensions/ in der Omnibox oder klicken Sie auf das Chrome-Menü und halten Sie den Mauszeiger über "Weitere Tools" dann wählen Sie „Erweiterungen“ aus.

Aktivieren Sie auf der Seite zur Verwaltung von Erweiterungen den Entwicklermodus, indem Sie auf den Umschalter neben Entwicklermodus: Klicken Sie dann auf die Schaltfläche ERWEITERUNG VERpacken.

"Entwicklermodus" ist aktiviert, dann klicke auf "Erweiterung packen".

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

Geben Sie den Erweiterungspfad an und klicken Sie dann auf „Erweiterung packen“.

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

Gepackte Erweiterungsdateien

Verlieren Sie nicht den privaten Schlüssel! Bewahre die .pem-Datei an einem geheimen und sicheren Ort auf. es wird um die Erweiterung aktualisieren zu können.

CRX-Paket aktualisieren

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

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

Kehren Sie zur Seite zur Verwaltung von Erweiterungen zurück und klicken Sie auf die Schaltfläche ERWEITERUNG PAKIEREN. Geben Sie die Pfad zum Verzeichnis der Erweiterungen und zum Speicherort des privaten Schlüssels.

Erweiterungsdateien aktualisieren

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

Erweiterungsdateien aktualisieren

Paket über die Befehlszeile

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

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

Host

Ein Server, auf dem .crx-Dateien gehostet werden, muss geeignete HTTP-Header verwenden, damit Nutzer die indem Sie auf einen Link klicken.

Google Chrome stuft eine Datei als installierbar ein, 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 wahr: <ph type="x-smartling-placeholder">
      </ph>
    • 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"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

Der häufigste Grund für das Fehlen einer installierbaren Datei ist, dass der Server Überschrift X-Content-Type-Options: nosniff. Der zweithäufigste Grund ist, dass der Server Unbekannter Inhaltstyp, der nicht in der Liste oben aufgeführt ist Um ein Problem mit dem HTTP-Header zu beheben, die Konfiguration des Servers überprüfen oder versuchen, die .crx-Datei auf einem anderen Server zu hosten.

Aktualisieren

Alle paar Stunden prüft der Browser installierte Erweiterungen auf Update-URLs. Für jedes Ergebnis ist ein an diese URL senden und nach einer Manifest-XML-Datei für die Aktualisierung suchen.

  • Bei dem Inhalt, der bei einer Updateprüfung zurückgegeben wird, handelt es sich um ein XML-Dokument im Update-Manifest, in dem die neuesten Version einer Erweiterung.

Wenn im Update-Manifest eine Version erwähnt wird, die aktueller als die installierte ist, wird der Browser lädt die neue Version herunter und installiert sie. Wie bei manuellen Aktualisierungen muss die neue .crx-Datei signiert werden mit demselben privaten Schlüssel wie die aktuell installierte Version.

Hinweis: Aus Datenschutzgründen sendet Google Chrome keine Cookie-Header bei Manifestanfragen für automatische Updates und ignoriert alle Set-Cookie-Header in den Antworten auf diese Anfragen.

URL aktualisieren

Erweiterungen, die auf Servern außerhalb des Chrome Web Store gehostet werden, müssen das Feld update_url in ihre manifest.json-Datei.

{
  "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 basiert auf dem Format, das von Omaha, der Update-Infrastruktur von Google, verwendet wird. Die im Erweiterungssystem die folgenden Attribute für die Elemente <app> und <updatecheck> des Update-Manifest:

appid
Die Erweiterungs-ID wird basierend auf einem Hash des öffentlichen Schlüssels generiert, wie unter Verpackung beschrieben. Die ID einer Erweiterung wird auf der Seite zur Verwaltung von Erweiterungen angezeigt.
Codebasis
Eine HTTPS-URL zur Datei .crx.
Version
Wird vom Client verwendet, um zu bestimmen, ob die durch codebase angegebene Datei .crx heruntergeladen werden soll. Er sollte mit dem Wert von „version“ übereinstimmen. in der Datei manifest.json der Datei .crx.

Die Update-Manifest-XML-Datei kann Informationen zu mehreren Erweiterungen enthalten, indem mehrere <app>-Elemente.

Test

Die Standardhäufigkeit für die Prüfung auf Updates beträgt mehrere Stunden. Ein Update kann jedoch über die Schaltfläche Update auf der Seite „Erweiterungen verwalten“.

Erweiterungen jetzt aktualisieren

Dadurch wird die Prüfung aller installierten Erweiterungen gestartet.

Erweiterte Verwendung: Anfrageparameter

Der grundlegende Mechanismus für automatische Updates wurde entwickelt, um die serverseitige Arbeit so einfach wie möglich zu machen statische XML-Datei auf einen einfachen Webserver wie z. B. Apache herunter und aktualisieren diese XML-Datei als neue veröffentlicht werden.

Entwickler, die mehrere Erweiterungen hosten, können Anfrageparameter prüfen, die die Erweiterungs-ID angeben und Version angeben. Mit diesen Parametern können Erweiterungen über die Dieselbe URL führt dynamischen serverseitigen Code anstelle einer statischen XML-Datei aus.

Das Format der Anfrageparameter ist wie folgt:

?x=EXTENSION_DATA

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

id=EXTENSION_ID&v=EXTENSION_VERSION

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

  • Erweiterung 1 <ph type="x-smartling-placeholder">
      </ph>
    • ID: „aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa“
    • Version: „1.1“
  • Erweiterung 2 <ph type="x-smartling-placeholder">
      </ph>
    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Version: „0.4“

Die Anfrage zum Aktualisieren jeder einzelnen Erweiterung lautet wie folgt:

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

Für jede eindeutige Update-URL können mehrere Erweiterungen in einer einzelnen Anfrage aufgelistet werden. Für den vorherigen Wenn ein Nutzer beispielsweise beide Erweiterungen installiert hat, werden sie in einer Einzelanfrage:

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, dass eine GET-Anfrage URL zu lang ist (mehr als 2000 Zeichen), gibt die Update-Prüfung zusätzliche GET-Anfragen wie folgt aus: notwendig ist.

Erweiterte Nutzung: Mindestversion des Browsers

Wenn dem Erweiterungssystem immer mehr APIs hinzugefügt werden, wird eine aktualisierte, funktionierende Version einer Erweiterung erstellt. mit neueren Versionen des Browsers veröffentlicht werden. Google Chrome selbst wird zwar automatisch aktualisiert, kann es einige Tage dauern, bis der Großteil der Nutzer auf eine neue Version aktualisiert ist. Bis dass ein bestimmtes Update nur für Google Chrome-Versionen gilt, die ab einem bestimmten die Version „prodversionmin“ dem <app>-Element in der Updateantwort 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 aktualisieren, wenn sie Google Chrome verwenden. 3.0.193.0 oder höher.