命令行打包Chrome插件
本文介绍了如何打包、托管和更新通用 Web 服务器中的 crx 文件。
1. 制作.crx 扩展程序安装包
1.1. 手动制作.crx
在 Chrome 浏览器输入框中输入 chrome://extensions/打开扩展程序管理界面,或点击 Chrome 菜单,将光标悬停在“更多工具”上,然后选择“扩展程序”。
在“扩展程序管理”页面上,点击开发者模式旁边的切换开关来启用开发者模式。然后选择打包扩展程序按钮。
在“扩展程序根目录”字段中指定扩展程序文件夹的路径,然后点击打包扩展程序按钮。对于首次打包扩展程序,请忽略 Private key 字段。
Chrome 将创建两个文件:一个 .crx 文件和一个包含扩展程序私钥的 .pem 文件。
切勿丢失私钥!请将 .pem 文件保存在安全可靠的地方;更新扩展程序时需要用到此文件。
1.1.1. 更新.crx 扩展程序安装包
通过增加 manifest.json 中的版本号来更新扩展程序的 .crx 文件。
1 |
|
返回扩展程序管理界面,然后点击打包扩展程序按钮。指定扩展程序目录的路径以及私钥的位置。
点击打包扩展程序按钮生产新的.crx 文件。
1.2. 通过命令行打包
通过调用 chrome.exe 在命令行中打包扩展程序。使用 –pack-extension 标志可指定扩展程序的文件夹位置,使用 –pack-extension-key 标志可指定扩展程序私钥文件的位置。
1 | # For windows |
2. 托管
托管 .crx 文件的服务器必须使用适当的 HTTP 标头,以便用户通过点击链接来安装扩展程序。
如果满足以下任一条件,Google Chrome 就会将文件视为可安装:
- 该文件的内容类型为 application/x-chrome-extension
- 文件后缀为 .crx,并且满足以下两个条件:
- 文件不会使用 HTTP 标头 X-Content-Type-Options: nosniff 提供
- 文件包含以下内容之一:
- 空字符串
- “text/plain”
- “application/octet-stream”
- “unknown/unknown”
- “application/unknown”
- “/“
无法识别可安装文件的最常见原因是服务器发送了标头 X-Content-Type-Options: nosniff。
第二个最常见的原因是服务器发送的内容类型未知,即不在上一个列表中。
如需解决 HTTP 标头问题,请更改服务器的配置或尝试在其他服务器上托管 .crx 文件。
2.1. 更新
浏览器每隔几小时就会检查已安装的扩展程序,看是否有更新网址。对于每个扩展程序,它会向更新网址发出请求,以查找更新清单 XML 文件。
更新检查返回的内容是一个 XML 格式的更新清单,其中列出了相应扩展程序的最新版本。
如果更新清单中的版本高于安装的版本,浏览器就会下载并安装新版本。
新版本的.crx 扩展程序必须使用与当前已安装的版本相同的私钥签名。
注意:为了保护用户隐私,Google Chrome 不会在自动更新清单请求中发送任何 Cookie 标头,并且会忽略对这些请求的响应中的所有 Set-Cookie 标头。
2.1.1. 更新网址
在 Chrome 应用商店以外的服务器上托管的扩展程序必须在其 manifest.json 文件中包含 update_url 字段。
Linux 是唯一一个可供 Chrome 用户安装非 Chrome 应用商店托管的扩展程序的平台。
1 |
|
2.1.2. 更新清单
服务器返回的更新清单应为 XML 文档。
1 |
|
该 XML 格式借鉴了 Google 的更新基础架构 Omaha 所使用的格式。扩展程序系统会为更新清单的 <app>
和 <updatecheck>
元素使用以下属性:
- appid: 扩展程序 ID 根据公钥的哈希值生成,如打包中所述。扩展程序的 ID 会显示在“扩展程序管理”页面上
- 代码库: 指向 .crx 文件的 HTTPS 网址。
- 版本: 由客户端用于确定是否应下载 codebase 指定的 .crx 文件。它应与 .crx 文件的 manifest.json 文件中“version”的值一致。
更新清单可能会通过添加多个元素来包含有关多个扩展程序的信息。
3. troubleshooting
问题 1: 当点击.crx 文件下载按钮时,报错”程序包无效:CRX_REQUIRED_PROOF_MISSING“
4. 参考文档
crx is a utility to package Google Chrome extensions via a Node API