常见问题

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

一般问题

应用的能力

开发

请求新特性和报告问题

一般问题

什么是百度浏览器应用?

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

我应该如何设置百度浏览器以便开发应用?

只要您正在使用支持应用的某个版本的百度浏览器,您就已经完全有条件开始编写自己的应用。首先,您可以打开开发者模式。

单击百度浏览器菜单图标 并从工具(L)菜单选择应用(E)。如果“开发者模式”未选中,单击复选框选中它。现在您可以重新加载应用、加载未打包的目录中的文件,就像加载已打包的应用那样,还有更多。有关完整的教程,请参见入门

为百度浏览器编写应用时需要用到哪些技术?

编写应用与开发者创建网站一样,使用相同的标准网络技术。HTML 用于内容标记语言,CSS 用于格式化,JavaScript 用于脚本。由于百度浏览器支持 HTML5 和 CSS3,开发者可以在应用中使用最新的网络技术,例如画布和 CSS 动画。应用也可以访问一些 JavaScript API,帮助进行诸如 JSON 编码以及与浏览器交互的功能。

应用是不是每一次浏览器加载时都要从网上获取?

应用在安装时由百度浏览器下载,以后从本地磁盘上运行,以提高性能。然而,如果应用的新版本上传到网上,将会在后台自动下载下来,给所有安装了这一应用的用户。应用也可以在任何时候请求远程内容,与网络服务交互或从网上获取内容。

我应该如何确定百度浏览器版本与分支间的对应关系?

要确定百度浏览器的不同版本当前在各个不同平台上是否可用,请访问 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(百度浏览器Frame)、linuxmacwincros(百度浏览器OS)、iosandroid。列出的分支包括 canarydevbetastable。分支后面分成四部分的数是部署至相应平台、分支组合的当前和前一个百度浏览器的版本号。剩下的信息是一些元数据,有关发行版最早开始的时间以及与每一次编译相关的修订版本。

应用的能力

应用能否发起跨域 Ajax 请求?

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

应用能否使用第三方网络服务?

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

应用能否编码/解码 JSON 数据?

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

应用能否在本地存储数据?

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

应用能否使用 OAuth?

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

应用能否加载 DLL?

可以,只要使用 NPAPI 接口。然而由于可能的滥用行为,我们在百度浏览器应用中心中托管您的应用前要先审核。

应用能否在呈现的网页外创建用户界面?

可以。您的应用可以向百度浏览器的用户界面添加按钮,有关更多信息请参见浏览器按钮和页面按钮

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

应用能否监听 Chrome 标签页以及导航按钮的点击?

不能。应用仅限于监听 API 文档中描述的事件。

两个应用能否互相通信?

可以。应用可以向其他应用传递消息,有关更多信息请参见消息传递文档

应用能否使用 Google Analytics(分析)?

可以。由于应用就像网站一样,它们可以使用 Google Analytics(分析)来跟踪使用情况。然而,您需要修改所有的追踪代码,使用 HTTPS 版本的 Google Analytics(分析)库。有关更多信息请参见这一教程

应用能否修改 chrome:// 协议的 URL?

不能。应用 API 在设计时要尽可能减少新版本的浏览器出现时可能出现的向后兼容问题。如果允许 chrome:// URL 上的内容脚本,开发者可能会依赖于这些页面上的 DOM、CSS 和 JavaScript 保持不变。在最好的情况下,这些页面不能像现在这样迅速更新。在最坏的情况下,这意味着这些页面的更新中的某一个可能导致某个应用无法正常工作,以至于使用这一应用的用户的浏览器停止工作。

替换托管于这些 URL 上的内容是允许的,因为这样应用的开发者不得不实现他们需要的所有功能,而不会依赖于浏览器的内部实现保持不变。

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

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

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

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

应用能否在安装和卸载时得到通知?

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

开发

我应该如何为我的应用建立用户界面?

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

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

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

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

您可以通过创建一个选项页面让用户为您的应用设置选项。选项页面是一个简单的 HTML 页面,当用户单击您的应用的“选项”链接时加载。这一页面可以从本地存储中读写数据,甚至可以将选项发送至网络服务器,以便在不同的浏览器中使用。

应用的开发者可以使用哪些调试工具?

百度浏览器内建的开发者工具可以用来调试应用和网页,有关更多信息请参见有关调试应用的教程

为什么通配符匹配对于顶级域名(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!我应该做什么确保让它被修复?

当您开发应用时,您可能会发现不匹配应用文档的行为,而这有可能是百度浏览器中的问题导致的。最好提交合适的问题报告,并向 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. 如果您原来在讨论组上报告了您的请求,并被引导至这一常见问题项,请回复您原来的帖子,附上您加星或提出的请求的链接。这将会使具有同样请求的其他人找到正确的内容。