自动更新

我们希望扩展程序和应用能够自动更新,原因与 Google Chrome 浏览器本身的一些相同。 加入错误和安全修复程序、添加新功能或增强性能,以及改进 界面。

如果您使用 Chrome 开发者信息中心发布扩展程序,则应忽略此页面。Chrome 网页版 通过预览的商店提交内容会自动显示在扩展程序的 Chrome 应用商店商品详情中,并部署给最终用户。

如果您是在网络服务器上托管 CRX 文件,并使用企业政策将其推送到受管理的 继续阅读您还应阅读托管打包

以前,当支持离线扩展程序时,可以具有原生二进制文件和 在锁定步骤中更新扩展程序。不过,托管在 Chrome 应用商店中的扩展程序 通过开发者无法控制的 Chrome 更新机制进行更新。扩展程序开发者 在更新依赖于原生二进制文件的扩展程序(例如, 使用 NPAPI 的旧版扩展程序)。

概览

  • 清单可能包含“update_url”字段,指向进行更新检查的位置。
  • 更新检查返回的内容是一个更新清单 XML 文档,其中列出了 扩展程序版本

浏览器每隔几小时就会检查是否有任何已安装的扩展程序或应用具有更新网址。对于 每个,都会向该网址请求更新清单 XML 文件。如果更新 但指定的版本比已安装的版本更新, 安装新版本。与手动更新一样,新的 .crx 文件也必须使用相同的签名 与当前安装的版本相同。

更新网址

如果您正在托管自己的扩展程序或应用,则需要将“update_url”字段添加到您的 manifest.json 文件,如下所示:

{
  "name": "My extension",
  ...
  "update_url": "http://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='http://myhost.com/mytestextension/mte_v2.crx' version='2.0' />
  </app>
</gupdate>

该 XML 格式借用了 Google 的更新基础架构 Omaha 所使用的格式。请参阅 如需了解详情,请访问 http://code.google.com/p/omaha/。扩展程序系统使用 为更新清单的 元素设置以下属性:

appid

扩展程序或应用 ID,基于公钥的哈希值生成,如 打包。您可以前往“扩展程序”页面,找到扩展程序或 Chrome 应用的 ID (chrome://extensions).

但是,“扩展程序”页上不会列出托管应用程序。您可以使用 执行下列步骤:

  • 打开应用。您可在“新标签页”页面上点击相应的图标来执行此操作。
  • 打开 JavaScript 控制台。您可以点击扳手图标,然后依次选择工具 > JavaScript 控制台
  • 在 JavaScript 控制台中输入以下表达式:chrome.app.getDetails().id。通过 控制台会将应用 ID 显示为带英文引号的字符串。
代码库

指向 .crx 文件的网址。

版本

供客户端用来确定是否应下载由.crx codebase。它应该与“version”的值一致位于 .crx 文件的 manifest.json 文件中。

更新清单 XML 文件可能包含关于多个扩展名的信息 元素

测试

默认的更新检查频率为几小时,但您可以使用 “扩展程序”页面上的立即更新扩展程序按钮。

高级用法:请求参数

基本的自动更新机制旨在让服务器端工作变得如同删除 将静态 XML 文件复制到任何普通 Web 服务器(如 Apache),并在发布时更新该 XML 文件 新版本的附加信息

更高级的开发者可能希望利用我们在 请求更新清单以指明扩展程序 ID 和版本。然后,他们可以使用 更新其所有扩展程序的网址,改为指向运行动态服务器端代码的网址 一个静态 XML 文件的名称

请求参数的格式为:

?x=_<extension_data>_

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

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

例如,假设您有两个扩展程序,它们都指向同一个更新网址 (http://test.com/extension_updates.php):

  • 扩展程序 1 <ph type="x-smartling-placeholder">
      </ph>
    • ID:“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • 版本:“1.1”
  • 扩展程序 2 <ph type="x-smartling-placeholder">
      </ph>
    • ID:“bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • 版本:“0.4”

更新各个扩展程序的请求如下所示:

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

对于每个唯一的更新网址,一个请求中可以列出多个扩展程序。对于上述 例如,如果用户安装了这两个扩展程序,那么这两个请求会合并为 单个请求:

http://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 或更高版本。