其他部署方式

通常,用户自己安装扩展程序。然而有时候您可能希望扩展程序自动安装,如下是两个典型案例:

  • 扩展程序与其他软件有联系,并且用户安装软件时也应该同时安装扩展程序,在用户卸载软件时扩展程序也应该同时被卸载。
  • 网络管理员希望在整个公司安装同样的扩展程序。

自动安装的扩展程序称为外部扩展程序。Google Chrome 浏览器支持两种安装外部扩展程序的方式:

  • 使用首选项 JSON 文件(仅用于 Mac OS X 和 Linux)
  • 使用 Windows 注册表(仅用于 Windows)

这两种方式都支持安装托管在更新 URL 上的扩展程序。在 Windows 注册表中,update_url 必须指向 Chrome 网上应用店中扩展程序的所在位置。

在首选项文件中,它可以指向您自己托管扩展程序的服务器(参见自动更新),首选项 JSON 文件还支持通过用户计算机上的 .crx 文件安装扩展程序(参见托管)。

从您的网站安装扩展程序:对于您的用户来说,最安全的选择就是将您的扩展程序发布到 Chrome 网上应用店。不是自己托管扩展程序,而是在网上应用店中发布,并通过内嵌安装链接到网上应用店进行安装。

在您开始前

首先,在网上应用店发布扩展程序或打包.crx 文件并确保它能够成功安装。

在 Windows 中必须从 Chrome 网上应用店安装扩展程序:
从 Chrome 33 开始,不再允许从本地 .crx 路径安装外部扩展程序(参见Protecting Windows users from malicious extensions(保护 Windows 用户,避免恶意扩展程序))。

如果从更新 URL安装,请确保扩展程序已正确托管

编辑首选项文件或者注册表前,请先记录以下内容:

  • 打算存放扩展程序 .crx 文件的位置,或者托管扩展程序的更新 URL。
  • 扩展程序的版本(来自清单文件或者 chrome://extensions 页面)
  • 扩展程序的标识符(加载已打包的扩展程序后可以从 chrome://extensions 页面获得)

以下例子假定版本为 1.0,标识符为 aaaaaaaaaabbbbbbbbbbcccccccccc

使用首选项文件


仅用于 Mac OS X 和 Linux:不要在 Windows 中使用首选项文件,而应该使用 Windows 注册表

  1. 如果您从文件安装,确保 .crx 扩展程序文件在您需要安装扩展程序的计算机上可用。(将它复制到本地目录或者网络共享,例如 \\server\share\extension.crx/home/share/extension.crx。)
  2. 在下面列出的某一个文件夹中创建以下名称的文件:aaaaaaaaaabbbbbbbbbbcccccccccc.json,其中文件名(不包括扩展名)对应于您的扩展程序标志符。文件的位置取决于操作系统。
    Mac OS X
    用于某个特定用户:~USERNAME/Library/Application Support/Google/Chrome/External Extensions/
    用于所有用户:/Library/Application Support/Google/Chrome/External Extensions/

    只有路径中每一个目录的所有者都是 root,属于 adminwheel组,并且不是所有人都具有写入权限,才会读取用于所有用户的外部扩展程序文件。另外,路径还不能包含符号链接。这些限制确保未授权的用户不能使扩展程序为所有用户安装。有关详情请参见疑难解答

    注意:以上用于所有用户的路径在 Chrome 16 中添加,之前的版本使用另一个路径:
    /Applications/Google Chrome.app/Contents/Extensions/,该路径在版本 17 中弃用,在版本 20 中不再支持。请使用以上列出的某一个路径。

    Linux
    /opt/google/chrome/extensions/
    /usr/share/google-chrome/extensions/
    注意:如果有必要的话使用 chmod 确保所有人都能读取 extensions/aaaaaaaaaabbbbbbbbbbcccccccccc.json
  3. 如果您从文件安装的话,通过 "external_crx" 与 "external_version" 字段在以上创建的文件中指定扩展程序的位置与版本。

    例如:

      {
        "external_crx": "/home/share/extension.crx",
        "external_version": "1.0"
      }
    

    注意: 在指定的位置中您必须为所有 \ 字符转义。例如, \\server\share\extension.crx 应该是 "\\\\server\\share\\extension.crx"

    如果您从更新 URL 安装,请在名为 "external_update_url" 的字段中指定扩展程序的更新 URL。

    例如:
    {
      "external_update_url": "http://myhost.com/mytestextension/updates.xml"
    }

    如果您只需要为某些浏览器语言安装扩展程序,您可以在名为 "supported_locales" 的字段中列出支持的语言。可以指定诸如 "en" 之类的语言,这样扩展程序将为所有像 "en-US"、"en-GB" 等这样的英语语言安装。选择了扩展程序不支持的另一种语言,外部扩展程序将会被卸载。如果没有 "supported_locales" 列表,扩展程序将为所有语言安装。

    例如:
    {
      "external_update_url": "http://myhost.com/mytestextension/updates.xml",
      "supported_locales": [ "en", "fr", "de" ]
    }
  4. 保存 JSON 文件。
  5. 运行 Google Chrome 浏览器,并进入 chrome://extensions,您应该会看到列出的扩展程序。

注意:以前版本的 Google Chrome 浏览器使用 external_extensions.json 文件指定要安装哪些扩展程序,这种方式已弃用,您应该为每一个扩展程序使用单独的 .json 文件。

Mac OS 权限问题疑难解答

在 Mac OS 中,只有系统权限阻止未授权的用户更改它时,才会读取外部扩展程序文件。如果 Chrome 浏览器运行后您没有看见已安装的外部扩展程序文件,可能是因为外部扩展程序的首选项文件有权限问题。要确定是否是这一问题,请遵循如下步骤:

  1. 运行控制台程序。您可以在应用程序/实用工具/控制台找到它。
  2. 如果控制台最左边的图标为“显示日志列表”,单击该图标,左侧会出现新的一列。
  3. 单击左侧窗格中的“控制台消息”。
  4. 搜索无法读取外部扩展程序(Can not read external extensions)这一字符串。如果读取外部扩展程序文件过程中发生问题,您将会找到错误消息。寻找直接在它上方的另一个错误消息,它应该会描述这一问题。例如,如果您看到了如下错误:“路径 /Library/Application Support/Google/Chrome 的所有者不正确”(Path /Library/Application Support/Google/Chrome is owned by the wrong group),您需要使用 chgrp 或 Finder 的信息对话框将目录的所有者更改为管理员组。
  5. 修复这一问题后,重新启动 Chrome 浏览器,看看外部扩展程序现在是否安装。一个权限错误可能会使 Chrome 浏览器不能检测到第二个错误。如果外部扩展程序还没有安装,重复这些步骤,直到您在控制台应用程序中看不到错误。

使用 Windows 注册表

  1. 在注册表中寻找或创建如下键:
    • 32 位 Windows:HKEY_LOCAL_MACHINE\Software\Google\Chrome\Extensions
    • 64 位 Windows:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Google\Chrome\Extensions
  2. Extensions 键下创建一个新键(文件夹),名称与您的扩展程序标识符相同(例如,aaaaaaaaaabbbbbbbbbbcccccccccc)。
  3. 在您的扩展程序键中创建 update_url 属性,并设置为如下值:"https://clients2.google.com/service/update2/crx"(指向 Chrome 网上应用店中您的扩展程序的 crx 文件)。
    {
      "update_url": "https://clients2.google.com/service/update2/crx"
    }
  4. 运行浏览器,并进入 chrome://extensions,您应该看到列出的扩展程序。

更新和卸载

Google Chrome 浏览器在每一次启动时扫描首选项文件中的元数据项以及注册表,对已安装的外部扩展程序做出必要的更改。

要将您的扩展程序更新到新的版本,请更新相应的文件,并更新首选项文件或注册表中的版本。

要卸载您的扩展程序(例如,如果您的软件卸载了),请删除首选项文件(aaaaaaaaaabbbbbbbbbbcccccccccc.json)或者从注册表中删除元数据。

常见问题

这一部分回答有关外部扩展程序的常见问题。

允许“预装”扩展程序的方法从 Google Chrome 33 开始是否仍然支持?

仍然支持,但是只能从 Chrome 网上应用店的 update_url 安装,而不允许本地文件路径。

我能否将 URL 指定为指向外部扩展程序的路径?

可以,在 Mac OS X 和 Linux 下使用首选项 JSON 文件,在 Windows 下使用注册表。扩展程序必须按照托管部分描述的那样正确托管。在首选项文件中,使用 "external_update_url" 属性指向更新清单,包含您的扩展程序的 URL;在 Windows 注册表中,则使用 update_url 属性。

使用首选项文件安装时的常见问题有哪些?

  • 指定的标识符、版本与 .crx 文件中不同
  • .json 文件(aaaaaaaaaabbbbbbbbbbcccccccccc.json)的位置不正确
  • JSON 文件中有语法错误(忘记用逗号分隔项目或者某处遗漏行尾的逗号)
  • JSON 文件项指向的 .crx 路径不正确(或者指定的路径不包含文件名)
  • UNC 路径中的反斜杠没有转义(例如,"\\server\share\file" 是错误的,应该是 "\\\\server\\share\\extension"
  • 网络共享的权限问题

使用注册表安装时的常见问题有哪些?

  • 指定的标识符、版本与 Chrome 网上应用店中不同
  • 键在注册表中创建的位置不对
  • 注册表项指向的 Chrome 网上应用店 .crx 文件路径不正确
  • 网络共享的权限问题

我应该如何一步到位更新原生二进制文件和扩展程序?

以前支持网上应用店以外的扩展程序时,可以一次性更新原生二进制文件和扩展程序。而现在,Chrome 网上应用店中托管的扩展程序通过 Chrome 浏览器的更新机制更新,开发者并不能控制。扩展程序开发者在更新依赖于原生二进制文件的扩展程序(例如使用 NPAPI 的旧式扩展程序)时要特别注意。

如果用户卸载了扩展程序怎么办?

如果用户通过用户界面卸载了扩展程序,在启动时将不会再安装或更新这一扩展程序。换句话说,这一扩展程序进入了黑名单。

我应该如何从黑名单中去掉我的扩展程序?

如果用户卸载了您的扩展程序,您应该尊重这一决定。然而,如果您(开发者)意外地通过用户界面卸载了您的扩展程序,您可以通过用户界面正常安装扩展程序,然后卸载,移除黑名单标记。