在 Linux 上安裝擴充功能

如果擴充功能不是 Chrome 線上應用程式商店所代管的擴充功能,則只能由 Linux 使用者安裝。這個 一文會說明如何從個人伺服器封裝、代管及更新 .crx 檔案。如果 只透過 Chrome 線上應用程式商店發布擴充功能或主題。請參閱線上應用程式商店 託管及更新

包裝

擴充功能和主題會以 .crx 檔案的形式提供。透過 Chrome Developer 上傳時 資訊主頁,資訊主頁會自動建立 .crx 檔案。如果您是在個人 伺服器,.crx 檔案必須是在本機建立,或從 Chrome 線上應用程式商店下載。

前往 Chrome 線上應用程式商店下載 .crx

如果擴充功能是由 Chrome 線上應用程式商店代管,您可以透過 Chrome 線上應用程式商店下載 .crx 檔案 開發人員資訊主頁。在「你的資訊」下方找出擴充功能並點選「更多資訊」在 彈出式視窗,按一下藍色的 main.crx 連結即可下載。

從開發人員資訊主頁下載 .crx

下載的檔案可以代管於個人伺服器。如要以最安全的方式代管 做為擴充功能的內容,因此 Chrome 線上應用程式商店會自行簽署。這個 可協助偵測潛在的攻擊和竄改行為

在本機建立 .crx

擴充功能目錄會在「擴充功能管理」頁面轉換為 .crx 檔案。前往 chrome://extensions/,或按一下 Chrome 選單,將滑鼠遊標懸停在「更多工具」上。然後 選取「擴充功能」

在「擴充功能管理」頁面上,按一下 開發人員模式:然後選取「PACK EXTENSION」按鈕。

已勾選開發人員模式,然後點選「封裝擴充功能」

在「擴充功能根目錄」欄位中指定擴充功能資料夾的路徑,然後按一下 [封裝擴充功能] 按鈕,忽略首次套件的「Private key」欄位。

指定擴充功能路徑,然後按一下 [ Pack Extension]

Chrome 會建立兩個檔案:一個 .crx 檔案和一個 .pem 檔案,其中包含擴充功能的 私密金鑰

封裝的擴充功能檔案

請勿遺失私密金鑰!.pem 檔案保存在安全的地方。將會是 必須更新擴充功能。

更新 .crx 套件

如要更新擴充功能的 .crx 檔案,請在 manifest.json 中增加版本號碼。

{
  ...
  "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,且同時符合下列兩個條件:
    • 這個檔案「未」透過 HTTP 標頭 X-Content-Type-Options: nosniff 提供
    • 這類檔案會搭配下列其中一種內容類型提供:
    • 空字串
    • 「text/plain」
    • "application/octet-stream"
    • 「未知/未知」
    • 「應用程式/未知」
    • */*

無法識別可安裝檔案最常見的原因,就是伺服器會將 標頭 X-Content-Type-Options: nosniff。第二個最常見的原因是 未知的內容類型— 一個不在上述清單中。如要修正 HTTP 標頭問題,請 伺服器的設定,或嘗試在其他伺服器代管 .crx 檔案。

更新中

瀏覽器每隔幾小時就會檢查已安裝的擴充功能是否有更新網址。每個 Pod 都會 要求給該網址,尋找更新資訊清單 XML 檔案。

  • 更新檢查傳回的內容是更新資訊清單 XML 文件,其中列出 。

如果更新資訊清單提及的版本比安裝版本還新,瀏覽器 下載並安裝新版本和手動更新一樣,您必須簽署新的 .crx 檔案 私密金鑰與目前安裝的版本相同。

注意:為了保護使用者隱私,Google Chrome 不會透過自動更新資訊清單要求傳送任何 Cookie 標頭,也不會忽略這些要求回應中的任何 Set-Cookie 標頭。

更新網址

如果擴充功能是由 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>

Google 的更新基礎架構 Omaha 已借用這個 XML 格式。 擴充功能系統會將以下屬性的 <app><updatecheck> 元素 更新資訊清單:

appid擴充功能 ID 會根據公開金鑰的雜湊產生,如封裝中所述。擴充功能的 ID 會顯示在擴充功能管理頁面
程式碼集.crx 檔案的 HTTPS 網址。
版本供用戶端使用,以判斷是否應下載 codebase 指定的 .crx 檔案。它應該與「version」的值相符位於 .crx 檔案的 manifest.json 檔案中。

更新資訊清單 XML 檔案可能包含多個副檔名的資訊,方法是加入多個 &lt;app&gt;元素。

測試

預設的更新檢查頻率為數小時,但您可以使用更新 擴充功能管理頁面按鈕。

立即更新擴充功能

系統將開始檢查所有已安裝的擴充功能。

進階用法:要求參數

基本的自動更新機制專用來簡化伺服器端作業,就如同 安裝到任何純文字伺服器 (如 Apache),然後將該 XML 檔案更新為 發布擴充功能版本。

代管多個擴充功能的開發人員可能會檢查要求參數 (指出擴充功能 ID) 更新要求中的版本和版本只要加入這些參數,擴充功能就能從 執行動態伺服器端程式碼 (而非靜態 XML 檔案) 的「同一個網址」。

要求參數的格式如下:

?x=EXTENSION_DATA

其中 EXTENSION_DATA 是採用以下格式的網址編碼字串:

id=EXTENSION\_ID&v=EXTENSION\_VERSION

例如,兩個副檔名指向同一個更新網址 (https://test.com/extension_updates.php):

  • 擴充功能 1
    • ID:「aaaaaaaaaaaaaaaaaaaaaaaaaaaa」
    • 版本:「1.1」
  • 擴充功能 2
    • ID:"bbbbbbbbbbbbbbbbbbbbbbbb 更改</b]
    • 版本:「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

在每個專屬更新網址,單一要求中可以列出多則擴充內容。針對上述 舉例來說,如果使用者同時安裝這兩種擴充功能,系統會將這兩個要求合併為 單一要求:

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

如果使用同一個更新網址安裝的擴充功能數量夠大,因此發出 GET 要求 網址過長 (超過 2000 個字元),更新檢查會發出額外的 GET 要求, 無從得知

進階用法:瀏覽器版本最低需求

擴充系統中加入的 API 越多,擴充功能的更新版本就能順利運作 。Google Chrome 會自動更新 系統可能需要幾天的時間,才能將大部分使用者更新至任何指定新版本。目的地: 確保特定更新只會套用至特定版本的 Google Chrome 或更高版本 版本,請加上「prodversionmin」屬性設為更新回應中的 元素。

<?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 以上版本。