何时以及如何向浏览器报告 bug

浏览器是软件,和所有软件一样,它们也会有 Bug。有时,您可能会发现您开发的网站行为异常,或者与 MDN 或规范等文档的说明不符。这可能表明是您的代码存在 Bug,文档存在 Bug(但愿不是!),或者您用来测试网站的浏览器存在 Bug。在本文中,我们将讨论如何找出问题所在,以及如果发现浏览器存在 Bug,该如何提交 Bug。

这是谁的 Bug?

在提交浏览器 Bug 之前,您应该确认这确实是浏览器本身的 Bug。问题可能源于四个地方:您的代码、文档、浏览器或规范。在向浏览器报告 Bug 之前,排除其他可能性非常重要。通常,规范是最权威的来源;浏览器和文档都遵循规范,但仍可能出错。至于您的代码……嗯,在假设是浏览器 Bug 之前,重新检查拼写错误和逻辑错误总是有益的。

创建测试用例

识别问题根源的第一步是创建一个最小化的测试用例来重现 Bug。它应该尽可能小且独立,最好是单个 HTML 文件,包含内联 CSS 和 JavaScript,没有外部依赖或无关代码。这有两个原因很有用:

  • 它最大限度地减少了问题由您自己的代码或外部依赖项引起的可能性。
  • 无论如何,如果您想与他人讨论,都需要提供它——例如,在提交 Bug 时。

例如,以下是一个与 :autofill 伪类相关的 Bug 的良好测试用例。请注意,我们已将其精简到最少,这意味着省略了最佳实践,例如包含 doctype、<head><body> 标签,或者输入框的标签。这没关系,因为相关代码仍然存在。

html
<style>
  :autofill {
    border: 3px solid darkorange;
  }
</style>
<input id="name" name="name" type="text" autocomplete="name" />
<input id="email" name="email" type="email" autocomplete="email" />

测试您的代码

您可以将 HTML 代码保存在本地并通过测试服务器提供服务,或者使用 JSFiddleCodePen 等在线服务创建实时演示。

测试问题是否为浏览器 Bug 的最简单方法是在多个浏览器中打开您的测试用例。如果您在不同浏览器中遇到不同的行为,那很可能就是浏览器 Bug。

注意: 您可以采取其他步骤来隔离问题,例如在隐私窗口中测试、禁用扩展程序或清除缓存。在报告 Bug 之前,您也应该尝试这些方法。

检查实现状态

首先,相信文档,并调查其行为与之不符的浏览器。并非所有意外行为都是 Bug。有时浏览器可能会实现尚未合并到规范中的功能或行为,因此不太可能被记录。另一种可能性是,某个功能在规范中有所描述,但尚未在任何浏览器中实现,这也意味着它可能未被记录。

此时,您应该查看更多来源来确定实现情况。以下是一些可以查找的地方:

  • MDN 的浏览器兼容性表格:在我们参考页面的“浏览器兼容性”部分(例如,请查看 shape() CSS 函数页面上的此部分),您将找到有关哪些浏览器支持某个功能以及支持程度的信息。这可能表明您的目标浏览器尚未实现某个功能,或者仅部分实现(即,它存在已知的 Bug 或限制)。
  • 规范存储库:标准机构,如 WHATWG(用于 DOM、HTML、fetch 等)、WHATWGCSSWG(用于 CSS)和 TC39(用于 JavaScript),都在 GitHub 上公开协作。您可以检查规范是否最近已更改,或者您正在测试的功能是否存在未解决的问题。
  • 社区论坛MDN 社区是一个很好的起点,其他 Web 开发论坛也是如此。这些地方很适合提问关于浏览器是否尚未实现某个功能,或者是否存在已知 Bug 的问题。
  • 您正在测试的浏览器的 Issue Tracker:如果您发现与您的问题相关的 Issue 已被提交,那就证实了 Bug 的真实性,您无需再做其他事情。实际上,我们接下来将讨论 Issue Tracker。

当然,即使所有浏览器都表现相同,它们可能都存在 Bug,或者可能只有一个浏览器实现了预期的行为。文档可能已过时或不正确。为了确定,您应该将规范视为真相的来源(除了浏览器在规范之前实现某些功能的罕见情况)。在每个 MDN 参考页面上,您都可以在“规范”部分找到相关规范的链接(请参阅此示例)。阅读规范以检查应有的行为。有时规范可能很难理解,因为它们是为浏览器工程师准备的,但请尽力而为。

如果事实证明所有浏览器和规范都是一致的,但 MDN 错了,请考虑贡献

浏览器 Bug 跟踪器

每个浏览器都有自己的 Bug 跟踪器,您可以在其中搜索现有 Bug 并提交新的 Bug。界面和流程一开始可能会感觉有些陌生,但通常会有说明。下表列出了主要浏览器的 Bug 跟踪器:

浏览器 Bug 跟踪器
Apple Safari WebKit Bugzilla
Google Chrome Chromium Issues
Mozilla Firefox Mozilla Bugzilla
Opera Opera Bug Wizard

在提交新 Bug 之前,请搜索现有的 Bug 报告。如果您找到与您的问题匹配的现有 Bug 报告,您可以添加评论并附上您的发现(例如,如果您找到了解决方法,或者您有关于该 Bug 的更多信息)。但是,不要添加“我也发现了这个 Bug”之类的评论,因为它们并没有真正增加价值。如果您找不到现有的 Bug,可以提交新的 Bug——如果它是重复的,会有人告诉您的。

在提交新 Bug 时,请确保包含您的最小化测试用例以及报告表中要求的任何其他信息,例如浏览器版本、预期结果与实际结果以及屏幕截图。某些 Bug 跟踪器还可能要求您为 Bug 选择组件或类别,例如渲染或网络。浏览器开发人员使用这些标签来组织工作。如果您不确定该选择哪个,请尽量猜测——如果需要,会有人重新分配的。

为非浏览器软件提交 Bug

如果 Bug 与可能与浏览器集成的非浏览器软件相关,您需要向相关软件供应商提交 Bug。下表列出了一些辅助技术以及为其提交 Bug 的位置:

软件 提交位置
Freedom Scientific JAWS JAWS 技术支持表单
Non Visual Desktop Access (NVDA) 提交 NVDA Bug