常见问题解答

如果您没有在此处找到问题解答,请尝试 Chrome 应用商店常见问题解答Stack Overflow 上的 [google-chrome-extension] 标记chromium-extensions 群组商店帮助

常规

什么是 Google Chrome 扩展程序?

Google Chrome 扩展程序是在 Chrome 浏览器内运行的应用,可提供 功能、与第三方网站或服务集成以及自定义浏览 体验。

如何设置 Chrome 浏览器以便开发扩展程序?

只要您使用的 Chrome 版本支持扩展程序,您就已经拥有了一切 您需要开始自行编写扩展程序。您可以先开启开发者模式。

点击 Chrome 菜单图标,然后从工具菜单中选择扩展程序。请确保 “开发者模式”复选框。现在您可以重新加载 扩展程序、加载解压的文件目录等。对于 请参阅使用入门

使用哪些技术为 Chrome 编写扩展程序?

扩展程序使用标准网络技术编写, 网站。HTML 用作内容标记语言,CSS 用作样式设置,JavaScript 则用于 脚本。由于 Chrome 支持 HTML5 和 CSS3,因此开发者可以使用最新的开放网络 画布和 CSS 动画等技术。扩展程序还可以访问 多个 JavaScript API,这些 API 可帮助执行 JSON 编码以及与 API 交互 。

浏览器每次加载时都会从网页中提取扩展程序吗?

Chrome 浏览器在安装时会下载扩展程序,扩展程序随后会从 以提高性能。不过,如果 在线时,系统会自动在后台将其下载给安装了该扩展程序的所有用户 已安装。扩展程序也可能会随时请求获取远程内容,以便与 或从网络中提取新内容。

如何确定将哪个版本的 Chrome 部署到哪个渠道?

要确定各个不同平台上目前提供的 Chrome 版本, 访问 omahaproxy.appspot.com。在该网站上,您会看到采用类似格式的数据:

cf,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cf,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
linux,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
mac,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,canary,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
win,stable,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,dev,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####
cros,beta,#.#.###.#,#.#.###.#,mm/dd/yy,mm/dd/yy,#####,#####,#####

每一行代表有关不同平台和渠道组合的信息。列出的 平台包括 cf (Google Chrome Frame)、linuxmacwincros (Google ChromeOS)。通过 列出的渠道为canarydevbetastable。后两个由 4 部分组成的数字, 渠道代表部署到该平台渠道的 Chrome 的现行版本和先前版本 组合其余信息是关于版本首次发布时间的元数据, 以及与每个版本关联的修订版本号

功能

扩展程序能否发出跨网域 Ajax 请求?

可以。扩展程序可以发出跨网域请求。如需了解详情,请参阅此页面

扩展程序能否使用第三方网络服务?

可以。扩展程序能够发出跨域 Ajax 请求,因此可以调用远程 API 。以 JSON 格式提供数据的 API 特别易于使用。

扩展程序可以对 JSON 数据进行编码/解码吗?

可以,因为 V8(Chrome 的 JavaScript 引擎)原生支持 JSON.stringify 和 JSON.parse, 可以按此处所述,在您的扩展程序中使用这些函数,而不添加任何 JSON 库。

扩展程序可以在本地存储数据吗?

可以,扩展程序可以使用 localStorage 永久存储字符串数据。使用 Chrome 内置的 JSON 函数,您可以将复杂的数据结构存储在 localStorage 中。对于需要 对它们存储的数据执行 SQL 查询,Chrome 实施了客户端 SQL 数据库, 也可以使用

扩展程序可以使用 OAuth 吗?

是的,有些扩展程序使用 OAuth 访问远程数据 API。大多数开发者都发现 使用 JavaScript OAuth 库来简化 OAuth 签名的流程,非常方便 请求。

扩展程序能否在所呈现的网页之外创建界面?

是的,您的扩展程序可能会向 Chrome 浏览器的界面添加按钮。请参阅浏览器 操作网页操作

扩展程序还可以创建弹出式通知,而这些通知显示在浏览器窗口之外。请参阅 桌面通知文档。

扩展程序是否可以监听对 Chrome 标签页和导航按钮的点击?

不能。扩展程序仅限于监听 API 文档中所述的事件。

两个扩展程序可以相互通信吗?

是的,扩展程序可能会向其他扩展程序传递消息。请参阅消息传递文档

扩展程序能否使用 Google Analytics?

可以,由于扩展程序和网站的构建一样,因此它们可以使用 Google Analytics 来跟踪 。不过,您必须修改跟踪代码,以提取 HTTPS 版本的 Google Analytics 库。如需详细了解如何执行此操作,请参阅此教程

扩展程序可以修改 chrome:// 网址吗?

不需要。Extensions API 旨在最大程度地减少可能出现的向后兼容性问题 在推送新版浏览器时触发。允许在 chrome:// 个网址上使用内容脚本意味着 开发者将开始依赖这些网页的 DOM、CSS 和 JavaScript 来保持不变。 理想情况下,这些网页不能像当前的更新那样快。 在最糟糕的情况下,这可能意味着更新这些网页中的某个网页可能会导致扩展程序 中断,导致浏览器的关键部分停止对该扩展程序的用户运行。

我们允许完全替换托管在这些网址中的内容,因为 迫使扩展程序开发者实现他们需要的所有功能,而不依赖于 不会改变浏览器的内部实现

扩展程序能否在没有用户互动的情况下打开浏览器/网页操作弹出式窗口?

不能。只有用户点击相应的页面或浏览器操作,才能打开弹出式窗口。一个 扩展程序无法以编程方式打开弹出式窗口。

扩展程序能否在用户点击弹出式窗口后让弹出式窗口保持打开状态?

不会。当用户将焦点转到浏览器之外的区域时,弹出式窗口会自动关闭 弹出式窗口。在用户点击离开后,无法使弹出式窗口保持打开状态。

扩展程序能否在安装/卸载时收到通知?

您可以监听 runtime.onInstalled 事件,以便在扩展程序 或 Chrome 本身的更新时发出通知。对于以下情况,没有相应的事件: 表明你的扩展程序已被卸载

开发

如何为扩展程序构建界面?

扩展程序使用 HTML 和 CSS 来定义其界面,因此您可以使用标准表单控件 来构建界面,或者像设置网页一样使用 CSS 设置界面样式。此外,扩展程序 可以向 Chrome 本身添加一些有限的界面元素

我可以在 localStorage 中存储多少数据?

扩展程序可以在 localStorage 中存储最多 5MB 的数据。

如何为应用程序创建选项菜单?

您可以创建一个选项页面,让用户为您的扩展程序设置选项。 将在用户点击“选项”时加载的简单 HTML 网页按钮。 此页面可以从 localStorage 中读写设置,甚至可以将选项发送到网络服务器, 因此它们可以跨浏览器保存

扩展程序开发者可以使用哪些调试工具?

Chrome 内置的开发者工具可用于调试扩展程序和网页。查看此信息 有关调试扩展程序的教程

为什么通配符匹配对顶级域名 (TLD) 无效?

您不能使用通配符匹配模式(如 http://google.*/*)来匹配 TLD(例如 http://google.eshttp://google.fr),因为实际限制此类 仅与所需的网域匹配。

对于 http://google.*/* 的示例,将匹配 Google 网域,但也是如此 http://google.someotherdomain.com。此外,许多网站并不拥有其所有顶级域名 网域。例如,假设您要使用 http://example.*/* 来匹配 http://example.com。 和http://example.es,但http://example.net是恶意网站。如果您的扩展程序存在错误 恶意网站可能会攻击您的扩展程序,以访问其 增加的权限。

您应明确枚举想要运行扩展程序的 TLD。

在安装/卸载扩展程序时,为什么 Management API 不会触发事件?

management API 旨在帮助创建“新标签页”页面替换扩展程序。不是 旨在触发当前扩展程序的安装/卸载事件。

扩展程序如何确定它是否是首次运行?

您可以监听 runtime.onInstalled 事件。请参阅此常见问题解答

功能和错误

我想我发现了一个错误!我如何确保问题能够得到解决?

在开发扩展程序时,您可能会发现与扩展程序不匹配的行为 文档,这可能是由于 Chrome 中的错误造成的。最佳做法是确保 提交适当的问题报告,且 Chromium 团队拥有足够的信息来重现 行为

为了确保做到这一点,您应该遵循以下步骤:

  1. 提供一个最简单的测试扩展程序来演示您希望报告的问题。本次 扩展程序应该包含尽可能少的代码来演示错误,通常应该是 不超过 100 行代码。很多时候,开发者会发现无法重现自己的问题 这也很好地表明了 bug 出自他们自己的代码。
  2. 访问 http://crbug.com 搜索问题跟踪器,看看是否有人报告了类似的问题 问题。大多数与扩展程序相关的问题都可以在 component=Platform>Extensions 下记录,因此 以查找与 chrome.tabs.executeScript 函数相关的扩展程序错误(例如), 搜索“component=Platform>Extensions Type=Bug chrome.tabs.executeScript此结果列表
  3. 如果您发现了与您的问题相符的错误,请点击星形图标以便在该错误发生时收到通知 收到更新。不要对 bug 说“我也是”或者问“这是什么时间?” “已修复?”;此类更新可能会导致系统发送数百封电子邮件。添加评论 (如更好的测试用例或建议的修复)。
  4. 如果您未找到可加星标的适当 bug,请通过 http://crbug.com/new 提交新的问题报告。 填写此表单时要尽量清楚明确:选择描述性的标题,对问题进行解释 重现 bug 的步骤,并说明预期行为和实际行为。附加测试 示例添加到报告中,并酌情添加屏幕截图。您的报告越容易 让其他人重现您的问题,您的 bug 就越有可能及时得到修复。
  5. 等待 bug 更新。大多数新错误都会在一周内被分类, 有时可能需要更长时间才能更新不要通过回复错误来询问问题何时发生 问题。如果您的错误在两周后仍未修改,请将问题发布至 讨论组,其中包含一个返回您错误的链接。
  6. 如果您最初在论坛中报告了错误,然后被定向到此常见问题解答条目, 回复您的原始会话,并提供指向您已加星标或报告的错误的链接。这样, 以便其他人更轻松地找到正确的 bug。

我有一项功能请求!如何举报?

如果您确定了可以添加到 改进扩展程序开发体验,请确保在问题中提交适当的请求 智能设备。

为了确保做到这一点,您应该遵循以下步骤:

  1. 访问 http://crbug.com 搜索问题跟踪器,查看是否有人请求 类似功能。大多数与扩展程序相关的要求都会归到 component=Platform>Extensions 部分,以便查找与以下内容相关的扩展程序功能请求: 键盘快捷键(例如),搜索 “component=Platform>Extensions Type=Feature shortcuts”,这将为您提供这份 结果
  2. 如果您找到了与您的请求相符的工单,请点击星形图标,以便在出现错误时收到通知。 收到更新。不要对 bug 说“我也是”或者问“这是什么时间?” implemented?";此类更新可能会导致系统发送数百封电子邮件。
  3. 如果您找不到可以加星标的恰当工单,请前往 http://crbug.com/new 提交新的请求。是 尽可能详细地填写以下表单:选择一个描述性的标题并加以说明 您需要准确了解自己想要什么功能,以及打算如何使用该功能。
  4. 等待工单更新。大多数新请求都会在一周内被分类, 有时可能需要更长时间才能更新请不要通过回复请求来询问此功能何时推出 已添加。如果您的请求在两周后仍未修改,请向 讨论组,其中包含返回您的请求的链接。
  5. 如果您最初在论坛上报告了您的请求,然后被定向到此常见问题解答 回复原始邮件,并提供您已加星标或打开的票据的链接。这将 这样,其他提出相同请求的用户就能更轻松地找到正确的工单。