更新 Firefox 5 的扩展

本文概述了您可能需要对扩展进行哪些更改,以便它们能在 Firefox 5 中正常工作。您可以在 Firefox 5 for developers 中找到 Firefox 5 中与开发者相关的更改的完整列表。

您需要做些什么吗?

如果您的扩展分发在 addons.mozilla.org (AMO) 上,它已经过自动兼容性验证工具的检查。不使用 Firefox 5 中更改的 API 且没有二进制组件(需要为每个主要的 Firefox 版本重新编译)的扩展已自动在 AMO 上更新,以表明它们可以在 Firefox 5 中工作。

所以,您应该首先访问 AMO,查看您的扩展是否需要进行任何工作。

注意: 即使您的扩展已自动升级,您仍应在 Firefox 5 上进行测试。有些边缘情况可能无法自动检测到。

一旦您确认需要进行更改,请返回此页面继续阅读。

由于开发周期很短(即使是我们的快速发布周期;Firefox 5 由于时间原因,其发布计划 extra-short),Firefox 5 中的 UI 相关更改非常少。

确定 UI 语言

过去,window.navigator.language DOM 属性反映了 Firefox 用户界面的语言。现在情况不再如此;相反,它反映了当前文档的 Accept-Language 标头的值。如果您需要检测 UI 语言,则应查看 general.useragent.locale 首选项的值。

DOM 更改

Window.setTimeout()WorkerGlobalScope.setTimeout()Window.setInterval()WorkerGlobalScope.setInterval() 的行为已发生变化;允许的最小时间已更改,并且 取决于具体情况。此外,在不活跃标签页(即用户当前未查看的标签页)中,超时和间隔被限制为每秒一次。

JavaScript 更改

以下关键字现在在 JavaScript 中是保留字,即使您不在 严格模式 下。

  • class
  • enum
  • export
  • extends
  • import
  • super

不要在代码中的任何地方使用这些关键字,即使是作为对象属性名。

注意: 这是 AMO 的自动升级工具可能无法始终捕获的事项之一,因此如果您的扩展已自动升级但仍无法正常工作,请检查您的代码是否存在这些问题。

接口更改

在启动时实例化某些服务,包括 nsICertOverrideService,可能会导致 Firefox 无法使用(Firefox bug 650858)。仅当您尝试在 load 事件触发之前实例化服务时才会发生这种情况。

要解决此问题,请将这些服务的实例化移至您的 load 事件处理程序中。

js
var MyObject = {
  comp: null,
  init() {
    this.comp = Components.classes["…"].getService(/* … */);
  },
  // …
};
window.addEventListener(
  "load",
  function () {
    MyObject.init();
  },
  false,
);

当然,一个更好的解决方案是遵循性能最佳实践,即在需要使用服务时才实例化它们。

另见