其他扩展程序分发选项

所有 Chrome 扩展程序都必须直接通过 Chrome 应用商店或使用下述机制分发。不遵守上述任一分发方法即违反了 Chrome 扩展程序政策,并且可能会导致相应扩展程序和/或分发该扩展程序的软件被标记为垃圾软件

用户通常会从 Chrome 应用商店安装扩展程序,但有时您可能希望通过其他方式安装扩展程序。下面是两种典型的情况:

  • 某个扩展程序与其他一些软件相关联,只要用户安装该软件,就应该安装该扩展程序。
  • 某位网络管理员想要在其整个组织中安装相同的扩展程序。

不是从 Chrome 应用商店安装的扩展程序称为外部扩展程序。 对于希望在安装其他软件的过程中分发扩展程序的开发者,或者希望在整个组织中分发扩展程序的网络管理员,Google Chrome 支持以下扩展程序安装方法:

  • 使用偏好设置 JSON 文件(仅适用于 Mac OS X 和 Linux)
  • 使用 Windows 注册表(仅适用于 Windows)

这两种方式都支持安装托管在 update_URL 上的扩展程序。在 Windows 和 Mac 上,update_URL 必须指向必须托管扩展程序的 Chrome 应用商店。

Linux 上的偏好设置文件可以指向您自己托管扩展程序的服务器。 偏好设置 JSON 文件还支持从用户的 Linux 计算机上的 .crx 扩展程序文件安装扩展程序。

准备工作

首先,在 Chrome 应用商店中publish该扩展程序,或打包一个 .crx 文件并确保其能够成功安装。

如果通过更新网址安装,请确保扩展程序已正确托管

在修改偏好设置文件或注册表之前,请注意以下事项:

  • 扩展程序 .crx 文件的预期位置,或提供该扩展程序的更新网址
  • 扩展程序的版本(来自清单文件或 chrome://extensions 页面)
  • 扩展程序的 ID(加载的扩展程序来自 chrome://extensions 页面)

以下示例假定版本为 1.0,ID 为 aaaaaaaaaabbbbbbbbbbcccccccccc

使用偏好设置文件

  1. 如果要通过 Linux 上的文件进行安装,请将 .crx 扩展程序文件提供给要安装该扩展程序的机器。(将其复制到本地目录或网络共享,例如,\\server\share\extension.crx/home/share/extension.crx。)
  2. 在下列某个文件夹中创建一个使用以下名称的文件:aaaaaaaaaabbbbbbbbbbcccccccccc.json,其中文件名(不含扩展名)与您的扩展程序 ID 相对应。具体位置取决于操作系统。

    Mac OS X:

    对于特定用户: ~USERNAME/Library/Application Support/Google/Chrome/External Extensions/ 对于所有用户:/Library/Application Support/Google/Chrome/External Extensions/

    仅当路径中的每个目录都归用户 root 所有、属于 adminwheel 组且不可全局写入时,所有用户的外部扩展程序文件才会被读取。路径还必须不包含符号链接。这些限制可防止非特权用户为所有用户安装扩展程序。如需了解详情,请参阅问题排查

    Linux:

    /opt/google/chrome/extensions/

    /usr/share/google-chrome/extensions/

    注意:如有必要,请使用 chmod 以确保 aaaaaaaaaabbbbbbbbbbcccccccccc.json 文件是全局可读的。

  3. 仅限 Linux:如果要通过文件安装,请在上面创建的文件中使用名为“external_crx”和“external_version”的字段指定扩展程序的位置和版本。

    • 例如:
    • json { "external_crx": "/home/share/extension.crx", "external_version": "1.0" }
    • 注意:您需要对每一个 \` character in the location. For example,\server\share\extension.crxwould be"\\server\share\extension.crx"` 进行转义。
    • 如果您通过更新网址安装,请使用字段名称“external_update_url”指定扩展程序的更新网址。
    • 通过本地 .crx 文件安装的示例(仅限 Linux):
    • json { "external_update_url": "http://myhost.com/mytestextension/updates.xml" }
    • 通过 Chrome 应用商店安装的示例(Mac 和 Linux):
    • json { "external_update_url": "https://clients2.google.com/service/update2/crx" }
    • 如果您只想为某些浏览器语言区域安装扩展程序,则可以在字段名称“supported_locale”中列出受支持的语言区域。语言区域可以指定父语言区域(如“en”),在这种情况下,系统会为所有英语语言区域(如“en-US”“en-GB”等)安装该扩展程序。如果选择了扩展程序不支持的其他浏览器语言区域,系统将卸载外部扩展程序。如果缺少“supported_locales”列表,系统将为任何语言区域安装扩展程序。
    • 例如:
    • json { "external_update_url": "https://clients2.google.com/service/update2/crx", "supported_locales": [ "en", "fr", "de" ] }
  4. 保存 JSON 文件。

  5. 启动 Google Chrome,然后转到 chrome://extensions;您应该会看到该扩展程序已列出。

排查 Mac OS 权限问题

在 Mac OS 上,只有当文件系统权限阻止无特权用户更改这些文件时,系统才会读取所有用户的外部扩展程序文件。如果在 Chrome 启动后,您没有看到安装的外部扩展程序,则可能是外部扩展程序偏好设置文件存在权限问题。要确认这是否是问题所在,请按以下步骤操作:

  1. 启动 Play 管理中心计划。您可以在“/Applications/Utilities/Console”下找到它。
  2. 如果控制台最左侧的图标显示“显示日志列表”,则点击该图标。左侧会显示第二列。
  3. 点击左侧窗格中的“Console Messages”。
  4. 搜索字符串 Can not read external extensions。如果读取外部扩展文件时出现问题,您会看到一条错误消息。在正上方查找另一条错误消息,其中应该会说明问题所在。例如,如果您看到以下错误:“Path /Library/Application Support/Google/Chrome is own by the wrong group”,您需要使用 chgrp 或 Finder 的“获取信息”对话框将目录的群组所有者更改为管理员群组。
  5. 解决问题后,请重新启动 Chrome。测试外部扩展程序现已安装完毕。一个权限错误可能会使 Chrome 无法检测到第二个错误。如果未安装外部扩展程序,请重复上述步骤,直到您在 Console 应用中没有看到错误。

使用 Windows 注册表

  1. 在注册表中查找或创建以下项:
    • 32 位 Windows:HKEY_LOCAL_MACHINE\Software\Google\Chrome\Extensions
    • 64 位 Windows:HKEY_LOCAL_MACHINE\Software\Wow6432Node\Google\Chrome\Extensions
  2. Extensions 键下创建一个新密钥(文件夹),其名称与您的扩展程序的 ID 相同(例如 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 每次启动时都会扫描偏好设置和注册表中的元数据条目,并对已安装的外部扩展程序进行必要的更改。

如需将扩展程序更新到新版本,请更新文件,然后在偏好设置或注册表中更新版本。

如需卸载扩展程序(例如卸载软件),请从注册表中移除偏好设置文件 (aaaaaaaaaabbbbbbbbbbbbcccccccc.json) 或元数据。

FAQ

本部分将解答有关外部扩展程序的常见问题。

从 M33 开始,Google Chrome 是否仍支持“预安装”方法?

可以,但只能通过 Chrome 应用商店 update_URL安装,而不能通过本地文件路径安装。

我可以将网址指定为外部扩展程序的路径吗?

可以。对于 Mac OS X 和 Linux,请使用偏好设置 JSON 文件;对于 Windows,请使用registry。必须按照托管中的说明托管扩展程序。在偏好设置文件中,使用“external_update_url”属性指向包含您的扩展程序网址的更新清单。在 Windows 注册表中,使用“update_url”属性。

使用偏好设置文件进行安装时有哪些常见错误?

  • 指定的 ID/版本与 .crx 中所列的 ID/版本不一致
  • .json 文件 (aaaaaaaaaabbbbbbbbbbcccccccccc.json) 位于错误的位置或指定的 ID 与扩展程序 ID 不匹配。
  • JSON 文件中存在语法错误(忘记使用英文逗号分隔条目或在某处留下英文逗号)
  • JSON 文件入口点指向 .crx 的错误路径(或指定了路径但未指定文件名)
  • UNC 路径中的反斜杠未转义(例如,"\\server\share\file" 不正确;应为 "\\\\server\\share\\extension"
  • 网络共享中的权限问题

使用注册表进行安装时有哪些常见错误?

  • 指定的 ID/版本未与 Chrome 应用商店中列出的 ID/版本相同
  • 密钥是在注册表中的错误位置创建的
  • 注册表入口点指向 Chrome 应用商店中 .crx 文件的错误路径
  • 网络共享中的权限问题

如何逐步更新原生二进制文件和扩展程序?

以前,如果支持离店扩展程序,可以在锁定步骤中更新原生二进制文件和扩展程序。不过,Chrome 应用商店中托管的扩展程序会通过 Chrome 更新机制进行更新,而该机制不受开发者控制。扩展程序开发者在更新依赖于原生二进制文件的扩展程序(例如,使用 NPAPI 的旧版扩展程序)时应格外小心。

如果用户卸载了扩展程序,会发生什么情况?

如果用户通过界面卸载该扩展程序,系统在每次启动时便不会再安装或更新该扩展程序。换言之,外部扩展程序已被列入屏蔽名单。

如何退出屏蔽名单?

如果用户卸载了您的扩展程序,您应该尊重该决定。不过,如果您(开发者)不小心通过界面卸载了扩展程序,则可以移除屏蔽名单标记,方法是通过界面正常安装扩展程序,然后将其卸载。