常见问题解答

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

一般措施

什么是 Google Chrome 扩展程序?

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

如何设置 Chrome 来开发扩展程序?

只要您使用的 Chrome 版本支持扩展程序,您就具备了开始编写自己的扩展程序所需的全部条件。您可以先启用开发者模式。

点击 Chrome 菜单图标,然后从工具菜单中选择扩展程序。请务必选中右上角的“开发者模式”复选框。现在,您可以重新加载扩展程序,像加载打包扩展程序一样加载解压缩的文件目录,等等。如需查看完整教程,请参阅使用入门

使用什么技术为 Chrome 编写扩展程序?

扩展程序是使用开发者用于创建网站的相同标准 Web 技术编写的。HTML 用作内容标记语言,CSS 用于样式设置,JavaScript 用于脚本。由于 Chrome 支持 HTML5 和 CSS3,因此开发者可以在其扩展程序中使用最新的开放式 Web 技术,例如画布和 CSS 动画。扩展程序还可以访问多个 JavaScript API,这些 API 有助于执行 JSON 编码等功能以及与浏览器交互。

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

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。渠道后面的两个四部分数字表示部署到该平台渠道组合的 Chrome 当前版本和之前版本。其余信息是关于首次推送版本的元数据,以及与每个 build 相关联的修订版本号。

功能

扩展程序可以发出跨网域 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:// 网址吗?

不需要。扩展程序 API 旨在最大程度减少在推送新版浏览器时可能出现的向后兼容性问题。允许在 chrome:// 网址上使用内容脚本意味着开发者将开始依赖这些网页的 DOM、CSS 和 JavaScript 保持不变。理想情况下,这些网页现在的更新速度不及时。 在最糟糕的情况下,这可能意味着更新其中一个页面可能会导致扩展程序中断,导致相应扩展程序的用户无法使用浏览器的关键部分。

我们之所以完全允许替换托管在这些网址上的内容,是因为这会强制扩展程序开发者实现他们需要的所有功能,而无需依赖浏览器的内部实现来保持不变。

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

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

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

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

扩展程序可以在安装/卸载时获得通知吗?

您可以监听 runtime.onInstalled 事件,以便在安装或更新扩展程序或者 Chrome 本身更新时收到通知。扩展程序的卸载时间没有对应的事件。

开发

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

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

localStorage 中可以存储多少数据?

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

如何为我的应用创建选项菜单?

您可以创建一个选项页面,以便用户为您的扩展程序设置选项。选项页面是一个简单的 HTML 页面,当用户点击您扩展程序的“选项”按钮时就会加载该页面。此页面可以读取和写入 localStorage 设置,甚至可以将选项发送到 Web 服务器,以便在各个浏览器中持久保留这些设置。

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

Chrome 的内置开发者工具可用于调试扩展程序和网页。如需了解详情,请参阅此关于调试扩展程序的教程

为什么通配符匹配不适用于顶级域名 (TLD)?

您无法使用 http://google.*/* 等通配符匹配模式来匹配 TLD(例如 http://google.eshttp://google.fr),因为实际上将此类匹配限制为仅所需的网域十分复杂。

http://google.*/* 为例,系统会匹配 Google 网域,但会匹配 http://google.someotherdomain.com。此外,许多网站并不拥有其网域的所有 TLD。例如,假设您要使用 http://example.*/* 来匹配 http://example.comhttp://example.es,但 http://example.net 是恶意网站。如果您的扩展程序存在 bug,恶意网站可能会攻击您的扩展程序,以便获取针对扩展程序增加的权限。

您应明确枚举要在其中运行扩展程序的顶级域名。

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

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

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

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

功能和错误

我想我发现了一个错误!如何确保问题得到修复?

在开发扩展程序时,您可能会发现与扩展程序文档不符的行为,而该行为可能是由 Chrome 中的 bug 导致的。建议您最好提交适当的问题报告,以便 Chromium 团队获得足够的信息来重现该行为。

为确保达成此目标,您应遵循的步骤:

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

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

如果您发现可以为了改善扩展程序开发体验而添加的某项功能(尤其是与实验性 API 相关时),请确保在问题跟踪器中提交适当的请求。

为确保达成此目标,您应遵循的步骤:

  1. 访问 http://crbug.com 搜索问题跟踪器,查看是否有人请求了类似功能。与扩展程序相关的大多数请求都列在 component=Platform>Extensions 下,因此,如需查找与键盘快捷键相关的扩展程序功能请求(例如,),请搜索“component=Platform>Extensions Type=Feature shortcuts”,系统会向您提供结果列表
  2. 如果您找到与您的请求匹配的工单,请点击星形图标,以便在 bug 收到更新时收到通知。请勿回复错误,说“我也是”,也不要问“什么时候会实现?”;此类更新可能会导致系统发送数百封电子邮件。
  3. 如果您未找到合适的待加星标的工单,请访问 http://crbug.com/new 提交新的请求。在填写此表单时,请尽可能详细地说明:选择一个描述性的标题,并准确说明您想要使用的功能以及您计划如何使用该功能。
  4. 等待工单更新。大多数新请求会在一周内被分类,但有时可能需要更长的时间才能更新。请勿回复工单询问何时添加该功能。如果您的工单在两周后仍未修改,请向讨论组发布一条消息,并附上指向您请求的链接。
  5. 如果您最初在论坛中举报了您的请求,然后被定向到此常见问题解答条目,请回复原始会话并提供指向您已加星标或打开的工单的链接。这样可让具有相同请求的其他人更轻松地找到正确的票据。