Linux 用のセルフホスト

Linux は、Linux 以外のプラットフォームでホストされている拡張機能を Chrome ユーザーがインストールできる唯一のプラットフォームです。 Chrome ウェブストアこの記事では、crx をパッケージ化、ホスト、更新する方法について説明します。 ウェブサーバーからファイルを読み取ることができます。拡張機能やテーマのみを配信する場合 Chrome ウェブストアからダウンロードする場合は、ウェブストアのホスティングと 更新中

パッケージ

拡張機能とテーマは .crx ファイルとして提供されます。Chrome Developer を使用してアップロードする場合 ダッシュボードの場合、crx ファイルが自動的に作成されます。公開されている場合 個人用サーバーを使用する場合は、crx ファイルをローカルに作成するか、Chrome からダウンロードする必要があります。 ウェブストア。

Chrome ウェブストアから .crx をダウンロードする

拡張機能が Chrome ウェブストアでホストされている場合、.crx ファイルは デベロッパー ダッシュボード[リスティング] で拡張機能を見つけます。[詳細]をクリックします ポップアップ ウィンドウが表示されたら、青色の main.crx リンクをクリックしてダウンロードします。

デベロッパー ダッシュボードから .crx をダウンロードする

ダウンロードしたファイルは、個人用サーバーでホストできます。これが、アプリケーションをホストするための最も安全な 拡張機能のコンテンツは Chrome ウェブストアによって署名されるため、ローカルに保存する必要があります。この 潜在的な攻撃や改ざんの検出に役立ちます。

ローカルで .crx を作成する

拡張機能ディレクトリは、拡張機能の管理ページで .crx ファイルに変換されます。次に移動: アドレスバーで chrome://extensions/ キーを押すか、Chrome メニューをクリックして、[その他のツール] の上にポインタを置きます。次に [拡張機能]を選択します

拡張機能の管理ページで、 デベロッパー モード。[PACK EXTENSION] ボタンを選択します。

[デベロッパー モード] にチェックが入っている状態で [拡張機能をパッケージ化] をクリック

[Extension root Directory] フィールドに拡張機能のフォルダのパスを入力し、[ [PACK EXTENSION] ボタン初回パッケージでは、[秘密鍵] フィールドを無視します。

拡張機能のパスを指定して [拡張機能をパッケージ化] をクリック

.crx ファイルと .pem ファイルの 2 つが作成されます。このファイルには拡張機能の されます。

パッケージ化された拡張機能ファイル

秘密鍵を紛失しないように注意してください。.pem ファイルを非公開の安全な場所に保管します。CANNOT TRANSLATE 拡張機能の更新に必要です。

.crx パッケージを更新する

manifest.json のバージョン番号を増やして、拡張機能の .crx ファイルを更新します。

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

拡張機能の管理ページに戻り、[拡張機能をパッケージ化] ボタンをクリックします。具体的な 拡張機能ディレクトリへのパスと秘密鍵の場所を指定します。

拡張機能ファイルの更新

このページには、更新されたパッケージ化された拡張機能のパスが表示されます。

拡張機能ファイルの更新

コマンドラインからパッケージ化する

コマンドラインで拡張機能をパッケージ化するには、chrome.exe を呼び出します。--pack-extension を使用する 拡張機能のフォルダの場所を指定するフラグと、--pack-extension-key フラグを 拡張機能の秘密鍵ファイルの場所を指定します。

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

ホスト

.crx ファイルをホストするサーバーでは、ユーザーがアプリをインストールできるように、適切な HTTP ヘッダーを使用する必要があります。 リンクからアクセスできます。

Google Chrome では、次のいずれかに該当する場合、ファイルはインストール可能と見なされます。

  • ファイルのコンテンツ タイプが application/x-chrome-extension である。
  • ファイルの接尾辞は .crx で、次の両方が当てはまります。 <ph type="x-smartling-placeholder">
      </ph>
    • ファイルが HTTP ヘッダー X-Content-Type-Options: nosniff で提供されていない
    • ファイルが次のいずれかのコンテンツ タイプで配信される
    • 空の文字列
    • "text/plain"
    • "application/octet-stream"
    • "unknown/unknown"
    • "application/unknown"
    • "\*/\*"

インストール可能なファイルを認識できない最も一般的な原因は、サーバーが ヘッダー X-Content-Type-Options: nosniff。2 番目によくある理由は、サーバーがパケットを 不明なコンテンツ タイプ(上記のリストにないもの)が返されます。HTTP ヘッダーの問題を解決するには、 サーバーの構成を確認するか、.crx ファイルを別のサーバーでホストしてみてください。

更新

ブラウザは数時間ごとに、インストールされている拡張機能の更新 URL を確認します。それぞれに対して、 リクエストをその URL に送信し、更新マニフェスト XML ファイルを探します。

  • 更新チェックで返されるコンテンツは、更新マニフェストの XML ドキュメントであり、 できます。

アップデート マニフェストに、インストールされているバージョンよりも新しいバージョンが記述されている場合、ブラウザは 新しいバージョンがダウンロード、インストールされます。手動アップデートと同様に、新しい .crx ファイルに署名する必要があります。 現在インストールされているバージョンと同じ秘密鍵でログインする。

注: ユーザーのプライバシーを保護するため、Google Chrome は自動更新のマニフェスト リクエストで Cookie ヘッダーを送信しません。また、これらのリクエストに対するレスポンスの Set-Cookie ヘッダーはすべて無視します。

URL を更新

Chrome ウェブストア以外のサーバーでホストされている拡張機能は、update_url manifest.json ファイルを開きます。

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

マニフェストを更新する

サーバーから返されるアップデート マニフェストは 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>

この XML 形式は、Google のアップデート インフラストラクチャである Omaha で使用されている形式に基づいています。「 拡張機能システムでは、<app><updatecheck> アップデート マニフェスト:

appid
拡張機能 ID は、公開鍵のハッシュに基づいて生成されます。詳細については、パッケージ化をご覧ください。拡張機能の ID は拡張機能の管理ページに表示されます。
コードベース
.crx ファイルへの HTTPS URL。
version
codebase で指定された .crx ファイルをダウンロードするかどうかを決定するためにクライアントによって使用されます。「version」の値と一致する必要があります。.crx ファイルの manifest.json ファイルに指定します。

更新マニフェストの XML ファイルには、複数の拡張子を含め、複数の拡張機能に関する情報を含めることができます。 <app> 要素。

テスト

デフォルトのアップデート チェック頻度は数時間ですが、[Update 拡張機能の管理ページにあります。

今すぐ拡張機能を更新

これにより、インストールされているすべての拡張機能のチェックが開始されます。

高度な使用方法: リクエスト パラメータ

基本的な自動更新メカニズムは、サーバー サイドの作業が、コードを 静的 XML ファイルを Apache などのプレーン ウェブサーバーにアップロードし、その XML ファイルを新しい 拡張機能のバージョンがリリースされます。

複数の拡張機能をホストするデベロッパーは、拡張機能 ID を示すリクエスト パラメータを確認できます 更新リクエストで指定できます。これらのパラメータを含めると、 静的 XML ファイルの代わりに動的なサーバーサイド コードを実行する同じ URL。

リクエスト パラメータの形式は次のとおりです。

?x=EXTENSION_DATA

ここで、EXTENSION_DATA は次の形式の URL エンコード文字列です。

id=EXTENSION_ID&v=EXTENSION_VERSION

たとえば、2 つの拡張機能が同じ更新 URL(https://test.com/extension_updates.php)を参照しているとします。

  • 拡張機能 1 <ph type="x-smartling-placeholder">
      </ph>
    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • バージョン: 「1.1」
  • 拡張機能 2 <ph type="x-smartling-placeholder">
      </ph>
    • ID: 「bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb」
    • バージョン: 「0.4」

個々の拡張機能を更新するリクエストは次のようになります。

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

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

固有の更新 URL ごとに、1 回のリクエストに複数の拡張機能を指定できます。前の たとえば、ユーザーが両方の拡張機能をインストールしている場合、2 つのリクエストは 単一リクエスト:

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

同じ更新 URL を使用しているインストール済みの拡張機能の数が多く、GET リクエストに対応できる場合 URL が長すぎる(2,000 文字を超えている)場合、更新チェックで追加の GET リクエストが発行されます。 できます。

高度な使用方法: ブラウザの最小バージョン

拡張機能システムにより多くの API が追加されるにつれて、機能する拡張機能の更新版 新しいバージョンのブラウザのみがリリースされます。Google Chrome 自体は自動更新ですが、 ユーザーベースの大半が新しいリリースに更新されるまで数日かかることがあります。宛先 特定の更新が特定のバージョン以降の Google Chrome にのみ適用されるように 「prodversionmin」変数を属性をアップデート レスポンスの <app> 要素に追加します。

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

これにより、ユーザーが Google Chrome を実行している場合にのみバージョン 2 に自動更新されるようになります。 3.0.193.0 以降