更新 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
事件处理程序中。
var MyObject = {
comp: null,
init() {
this.comp = Components.classes["…"].getService(/* … */);
},
// …
};
window.addEventListener(
"load",
function () {
MyObject.init();
},
false,
);
当然,一个更好的解决方案是遵循性能最佳实践,即在需要使用服务时才实例化它们。