常见问题

如果您在这里找不到您的问题的答案,请尝试 Chrome Web Store 常见问题Stack Overflow 上的 [google-chrome-extension] 标签网上论坛网上应用店帮助

一般问题

什么是 Google Chrome 浏览器扩展程序?

Google Chrome 浏览器的扩展程序是在 Chrome 浏览器中运行并提供附加功能、与第三方网站或服务整合、自定义浏览体验的应用。

为 Chrome 浏览器编写扩展程序时需要用到哪些技术?

编写扩展程序与开发者创建网站一样,使用相同的标准网络技术。HTML 用于内容标记语言,CSS 用于格式化,JavaScript 用于脚本。由于 Chrome 浏览器支持 HTML5 和 CSS3,开发者可以在扩展程序中使用最新的网络技术,例如画布和 CSS 动画。扩展程序也可以访问一些 JavaScript 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 Chrome OS)、iosandroid。列出的分支包括 canarydevbetastable。分支后面分成四部分的数是部署至相应平台、分支组合的当前和前一个 Chrome 浏览器的版本号。剩下的信息是一些元数据,有关发行版最早开始的时间以及与每一次编译相关的修订版本。

扩展程序的能力

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

可以,扩展程序能够发出跨域请求。有关更多信息,请参见这一页面

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

可以。扩展程序能够发出跨域 Ajax 请求,所以它们能够直接调用任何远程 API。以 JSON 格式提供数据的 API 使用起来特别方便。

扩展程序能否编码/解码 JSON 数据?

可以。因为 V8(Chrome 浏览器的 JavaScript 引擎)原生支持 JSON.stringify 和 JSON.parse,您可以在您的扩展程序中使用这些函数,如这一页面(英文)所述,而不用在您的代码中包含任何额外的 JSON 库。

扩展程序能否在本地存储数据?

可以。扩展程序可以使用 localStorage 来永久地存储数据。使用 Chrome 浏览器内建的 JSON 函数,您可以在 localStorage 中存储复杂的数据结构。对于需要在存储的数据上执行 SQL 查询的扩展程序,Chrome 浏览器实现了客户端 SQL 数据库,您也可以使用。从 Chrome 20 开始,扩展程序还能使用 chrome.storage API 存储数据,并且还可以自动同步。

扩展程序能否使用 OAuth?

可以。某些扩展程序就使用 OAuth 访问远程数据 API,大部分开发者觉得使用 JavaScript OAuth 库会更方便,这样可以简化发送 OAuth 请求的过程。

扩展程序能否加载 DLL?

可以,只要使用 NPAPI 接口。然而由于可能的滥用行为,我们在 Chrome 网上应用店中托管您的扩展程序前要先审核。

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

可以。您的扩展程序可以向 Chrome 浏览器的用户界面添加按钮,有关更多信息请参见浏览器按钮和页面按钮

扩展程序也可以创建弹出通知,在浏览器窗口外存在。有关更多详情请参见桌面通知文档。

扩展程序能否监听 Chrome 标签页以及导航按钮的点击?

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

两个扩展程序能否互相通信?

可以。扩展程序可以向其他扩展程序传递消息,有关更多信息请参见消息传递文档

扩展程序能否在没有用户交互的情况下打开浏览器/页面按钮的弹出内容?

不能。弹出内容只有当用户单击相应的页面/浏览器按钮时才能打开,扩展程序不能以编程方式打开自己的弹出内容。

扩展程序能否在用户单击其他地方后仍然使弹出内容保持打开状态?

不能。当用户将焦点移至弹出内容外的其他浏览器区域时,弹出内容会自动关闭,没有办法在用户单击其他地方后仍然保持弹出内容打开。

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

您可以监听 runtime.onInstalled 事件,当您的扩展程序安装或更新,或者 Chrome 浏览器本身更新时收到通知。您的扩展程序卸载时没有相应的事件产生。

开发

我应该如何为我的扩展程序建立用户界面?

扩展程序使用 HTML 和 CSS 定义它们的用户界面,所以您可以使用标准表单控件来建立您的用户界面,或者用 CSS 修改您的用户界面的样式,就像网页中一样。另外,扩展程序还可以向 Chrome 浏览器本身添加有限的用户界面元素

我能够在本地存储中储存多少数据?

扩展程序最多可以在本地存储中储存 5MB 数据。如果使用 chrome.storage API 并在清单文件中指定了 "unlimitedStorage" 权限则不受这一限制。

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

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 是一个恶意站点。如果您的扩展程序有漏洞,恶意站点可能会攻击您的扩展程序,通过您的扩展程序获得提升的特权。

您应该显式地列出所有您希望在上面运行您的扩展程序的顶级域名(TLD)。

为什么当我的扩展程序安装或卸载时管理 API 不产生事件?

管理 API 的目的是帮助您创建替代“打开新的标签页”页面的扩展程序,而不是为当前扩展程序产生安装/卸载事件。

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

您可以监听 runtime.onInstalled 事件,参见这一常见问题条目

请求新特性和报告问题

我认为我发现了一个bug!我应该做什么确保让它被修复?

当您开发扩展程序时,您可能会发现不匹配扩展程序文档的行为,而这有可能是 Chrome 浏览器中的问题导致的。最好提交合适的问题报告,并向 Chromium 小组提供足够的信息来重现这一行为。

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

  1. 建立一个最小的测试扩展程序,演示您想要报告的问题。该扩展程序应该包含尽可能少的代码,只要能演示问题就行。通常应该包含 100 行以下的代码。然而开发者经常发现他们不能用这种方式重现他们的问题,而这很可能意味着问题在他们自己的代码中。
  2. http://crbug.com 的问题追踪器中搜索是否已经有人报告了类似的问题,大部分与扩展程序相关的问题在 Feature-Extensions 分类中。例如要查找有关 chrome.tabs.executeScript 函数的扩展程序问题,请搜索“Feature=Extensions Type=Bug chrome.tabs.executeScript”,然后会出现结果
  3. 如果您发现了描述您的问题的 bug,单击加星图标,以便在这一 bug 收到更新时得到通知。请不要用“我也有这个问题”或者问“什么时候修复?”来回复这一 bug,这样的更新可能会导致几百封邮件的发送。只有当您要提供可能有帮助的信息(例如更好的测试案例或建议的修复)时才添加评论。
  4. 如果您没有找到合适的问题来加星,请在 http://crbug.com/new 提交新的问题报告。当您填写这一表格时要尽量明确:选择描述性的标题,解释重现问题的步骤,并描述预期的和实际的行为。将您的测试案例添加为附件,如果合适的话添加屏幕截图。您的报告越容易让别人重现您的问题,您的问题越有可能尽早修复。
  5. 等待问题更新。大部分新的问题会在一周内鉴别分类,尽管有时候可能要花更长的时间更新。不要回复问题,问这一问题何时修复。如果您的问题在两周后还没有修改,请向讨论组发送消息,附上您的问题的链接。
  6. 如果您原来在讨论组上报告了您的问题,并被引导至这一常见问题项,回复您原来的帖子,附上您加星或报告的问题的链接。这将会使遇到同样问题的其他人找到正确的 bug。

我想请求新特性!我应该如何报告?

如果您想到一个新功能(尤其是有关实验性 API 的),增加后可以改善扩展程序开发体验,确保合适的请求在问题追踪器中提交。

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

  1. http://crbug.com 中的问题追踪器中搜索,看看有没有人已经请求了类似的特性。大部分有关于扩展程序的请求在 Feature-Extensions 分类中。例如要想寻找有关键盘快捷键的扩展程序特性请求,请搜索“Feature=Extensions Type=Feature shortcuts”,然后出现结果
  2. 如果您发现了匹配您的请求的内容,单击加星图标,以便在这一请求更新时得到通知。不要回复“我也是这么想的”或询问“什么时候实现?”,这样的更新可能导致几百封邮件的发送。
  3. 如果您没有找到合适的内容来加星,请在 http://crbug.com/new 中填写新的请求。当您填写这一表格时要尽可能详细:选择描述性的标题,并准确描述您想要的特性以及您计划如何利用它。
  4. 等待请求更新。大部分新请求将会在一周内分类,尽管有时候可能需要更长的时间更新。不要直接回复请求,询问这一特性什么时候添加。如果您的请求在两周后还没有更新,请向讨论组发送消息,附上您的请求的链接。
  5. 如果您原来在讨论组上报告了您的请求,并被引导至这一常见问题项,请回复您原来的帖子,附上您加星或提出的请求的链接。这将会使具有同样请求的其他人找到正确的内容。