Installing extensions on Linux(在 Linux 上安装扩展)

警告 此页面直接从 MV2 文档集迁移而来。它尚未经过验证是否符合 Manifest V3。

托管在 Chrome 网上应用店之外的扩展程序只能由 Linux 用户安装。本文介绍如何从个人服务器打包、托管和更新 .crx 文件。如果仅通过 Chrome 网上应用店分发扩展程序或主题,请咨询网上商店托管和更新

# Packaging

扩展和主题作为 .crx 文件提供。通过 Chrome Developer Dashboard 上传时,仪表板会自动创建 .crx 文件。如果在个人服务器上发布,则需要在本地创建 .crx 文件或从 Chrome 网上应用店下载。

# Download .crx from the Chrome Web Store(从 Chrome 网上应用店下载 .crx)

如果扩展程序托管在 Chrome Web Store 上,则可以从开发人员仪表板下载 .crx 文件。在“您的列表”下找到扩展程序,然后单击“更多信息”。在弹出窗口中,单击蓝色的 main.crx 链接进行下载。

138

下载的文件可以托管在个人服务器上。这是在本地托管扩展程序的最安全方式,因为扩展程序的内容将由 Chrome 网上应用店签名。这有助于检测潜在的攻击和篡改。

# Create .crx locally(在本地创建 .crx)

扩展目录将在扩展管理页面转换为 .crx 文件。导航到 ominibox 中的 chrome://extensions/,或单击 Chrome 菜单,将鼠标悬停在“更多工具”上,然后选择“扩展”。

在扩展管理页面上,通过单击开发人员模式旁边的切换开关启用开发人员模式。然后选择 PACK EXTENSION 按钮。

139

在扩展根目录字段中指定扩展文件夹的路径,然后单击打包扩展按钮。忽略首次包的私钥字段。

140

Chrome 将创建两个文件,一个 .crx 文件和一个 .pem 文件,其中包含扩展程序的私钥。

141

不要丢失私钥!将 .pem 文件保存在一个秘密和安全的地方;需要更新扩展。

# Update a .crx package

通过增加 manifest.json 中的版本号来更新扩展的 .crx 文件。

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

返回扩展管理页面并单击 PACK EXTENSION 按钮。指定扩展目录的路径和私钥的位置。

142

该页面将提供更新的打包扩展的路径。

143

# Package through command line(通过命令行打包)

通过调用 chrome.exe 在命令行中打包扩展。使用 --pack-extension 标志指定扩展文件夹的位置,使用 --pack-extension-key 标志指定扩展私钥文件的位置。

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

# Hosting

托管 .crx 文件的服务器必须使用适当的 HTTP 标头,以允许用户通过单击链接来安装扩展。

如果满足以下任一条件,Chrome 浏览器会认为文件可安装:

  • 该文件的内容类型为 application/x-chrome-extension
  • 文件后缀是 .crx 并且以下两项都成立:
    • 该文件未与 HTTP 标头 X-Content-Type-Options: nosniff
    • 一起提供 该文件具有以下内容类型之一:
          • empty string
          • "text/plain"
          • "application/octet-stream"
          • "unknown/unknown"
          • "application/unknown"
          • "/"

无法识别可安装文件的最常见原因是服务器发送标头 X-Content-Type-Options: nosniff。第二个最常见的原因是服务器发送了一个未知的内容类型——不在前面的列表中。要修复 HTTP 标头问题,请更改服务器的配置或尝试将 .crx 文件托管在另一台服务器上。

# Updating

每隔几个小时,浏览器就会检查已安装的扩展程序是否有更新 URL。对于每一个,它都会向该 URL 发出请求,以寻找更新清单 XML 文件。

  • 更新检查返回的内容是一个更新清单 XML 文档,其中列出了扩展的最新版本。

如果更新清单提到的版本比安装的版本更新,浏览器会下载并安装新版本。与手动更新一样,新的 .crx 文件必须使用与当前安装的版本相同的私钥进行签名。

注意:为了维护用户隐私,谷歌浏览器不会随自动更新清单请求发送任何 Cookie 标头,并忽略对这些请求的响应中的任何 Set-Cookie 标头。

# Update URL

托管在 Chrome 网上应用店之外的服务器上的扩展程序必须在其 manifest.json 文件中包含 update_url 字段。

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

# Update manifest

服务器返回的更新清单应该是一个 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 是基于公钥的散列生成的,如打包packaging中所述。扩展程序的 ID 显示在扩展程序管理页面上Extensions Managment Page
codebase .crx 文件的 HTTPS URL。
version 由客户端用于确定是否应下载代码库codebase指定的 .crx 文件。它应该与 .crx 文件的 manifest.json 文件中的“version”值匹配。

更新清单 XML 文件可以通过包含多个元素来包含有关多个扩展的信息。

# Testing

默认更新检查频率是几个小时,但可以使用扩展管理页面上的立即更新扩展按钮强制更新。

144

这将开始检查所有已安装的扩展。

# Advanced usage: request parameters(高级用法:请求参数)

基本的自动更新机制旨在使服务器端的工作变得简单,只需将静态 XML 文件放到任何普通 Web 服务器(如 Apache)上,并在新扩展版本发布时更新该 XML 文件。

托管多个扩展的开发人员可以检查请求参数,指示更新请求中的扩展 ID 和版本。包含这些参数允许扩展从运行动态服务器端代码而不是静态 XML 文件的相同 URL 更新。

请求参数的格式为:

?x=_<extension_data>_

其中 _<extension_data>_ 是以下格式的 URL 编码字符串:

_id=<id>_&v=_<version>_

例如,两个扩展指向同一个更新 URL

(https://test.com/extension_updates.php):

  • Extension 1

    • ID: "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
    • Version: "1.1"
  • Extension 2

    • ID: "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
    • Version: "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,可以在单个请求中列出多个扩展。对于上面的示例,如果用户安装了这两个扩展,那么这两个请求将合并为一个请求:

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

如果使用相同更新 URL 的已安装扩展的数量足够大,以至于 GET 请求 URL 太长(超过 2000 个字符左右),更新检查会根据需要发出额外的 GET 请求。

# Advanced usage: minimum browser version(高级用法:最低浏览器版本)

随着更多 API 添加到扩展系统中,可能会发布仅适用于较新版本浏览器的扩展的更新版本。虽然谷歌浏览器本身是自动更新的,但大多数用户群更新到任何给定的新版本可能需要几天时间。要确保给定的更新仅适用于特定版本或更高版本的 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 3.0.193.0 或更高版本时才会自动更新到版本 2。

By.一粒技术服务.

results matching ""

    No results matching ""