Autoupdating

警告

重要提示:Chrome 将在所有平台上取消对 Chrome 应用程序的支持。 Chrome 浏览器和 Chrome 网上应用店将继续支持扩展程序。阅读公告并了解有关迁移应用程序的更多信息。

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

如果您使用 Chrome Developer Dashboard 发布,则应忽略此页面。通过预览的 Chrome 网上应用店提交将自动在扩展程序的 CHrome 网上应用店项目列表中可用,并部署给最终用户。

如果您在 Web 服务器上托管 CRX 文件并使用企业策略将其推送到托管设备,请继续阅读。您还应该阅读托管和包装。

警告

警告:从 M33 开始,Windows 稳定版/测试版频道用户只能下载托管在 Chrome 网上应用店中的扩展程序(请参阅保护 Windows 用户免受恶意扩展程序的侵害)。

以前,当支持店外扩展时,可以在锁定步骤中更新本机二进制文件和扩展。但是,Chrome Web Store 上托管的扩展程序是通过开发人员无法控制的 Chrome 更新机制进行更新的。扩展开发人员应该小心更新依赖于本机二进制文件的扩展(例如,使用NPAPI 的遗留扩展)。

# 概述

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

每隔几个小时,浏览器就会检查任何已安装的扩展程序或应用程序是否具有更新 URL。对于每一个,它都会向该 URL 发出请求,以寻找更新清单 XML 文件。如果更新清单提到的版本比安装的版本更新,浏览器会下载并安装新版本。与手动更新一样,新.crx文件必须使用与当前安装版本相同的私钥进行签名。

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

# 更新网址

如果您要托管自己的扩展程序或应用程序,则需要将“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/。扩展系统使用以下属性和 更新清单的元素:

  • 应用程序

    扩展程序或应用程序 ID,根据公钥的哈希生成,如打包 中所述。您可以通过转至“扩展”页面 ( chrome://extensions )找到扩展或 Chrome 应用程序的 ID 。但是,托管应用程序未列在“扩展”页面上。您可以使用以下步骤找到任何应用程序的 ID:打开应用程序。您可以通过单击新标签页上的图标来执行此操作。打开 JavaScript 控制台。您可以通过单击扳手图标并选择“工具”>“JavaScript 控制台”来执行此操作。在 JavaScript 控制台中输入以下表达式:chrome.app.getDetails().id. 控制台将应用程序的 ID 显示为带引号的字符串。

  • 代码库

    .crx文件的 URL 。

  • 版本

    由客户端用于确定它是否应该下载由.crx指定的文件codebase。它应该与.crx文件文件中的“version”值匹配manifest.json

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

# 测试

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

# 高级用法:请求参数

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

更高级的开发人员可能希望利用我们向更新清单请求添加参数以指示扩展 ID 和版本这一事实。然后,他们可以对所有扩展使用相同的更新 URL,指向运行动态服务器端代码的 URL,而不是静态 XML 文件。

请求参数的格式为:

?x=_<extension_data>_

_<extension_data>_格式的 URL 编码字符串在哪里:

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

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

  • 扩展 1

    • ID:“aaaaaaaaaaaaaaaaaaaaaaaaaaaaa”
    • 版本:“1.1”
  • 扩展 2

    • ID:“bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb”
    • 版本:“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

对于每个唯一的更新 URL,可以在单个请求中列出多个扩展。对于上面的示例,如果用户安装了这两个扩展,那么这两个请求将合并为一个请求:

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

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

注意:将来,可能不会发出多个 GET 请求,而是发出单个 POST 请求,并在 POST 正文中包含请求参数。

# 高级用法:最低浏览器版本

随着我们向扩展程序系统添加更多 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 ""