Firefox 9 插件更新

Firefox 9 没有很多应该成为插件开发者兼容性问题的更改。但是,有一些可能让您陷入困境的项目,所以让我们来看看。

您需要做任何事情吗?

如果您的插件是在 addons.mozilla.org (AMO) 上分发的,它已通过自动兼容性验证工具进行检查。不使用 Firefox 8 中更改的 API 并且没有二进制组件(每个主要 Firefox 版本都需要重新编译)的插件已在 AMO 上自动更新,以指示它们可以在 Firefox 9 中工作。

因此,您应该首先访问 AMO 并查看您的插件是否需要任何工作。

注意:即使您的插件已自动升级,您也应该在 Firefox 9 上对其进行测试。可能存在无法自动检测到的极端情况。

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

引导式插件可以移除延迟加载脚本

如果您的插件使用 nsIChromeFrameMessageManager.loadFrameScript() 并设置了延迟加载标志,则脚本将加载到从该点创建的每个框架中。这很棒,除了在 Firefox 9 之前,没有办法停止加载脚本,因此即使您的插件关闭后,它也会继续发生。

从 Firefox 9 开始,您应该调用新的 nsIChromeFrameMessageManager.removeDelayedFrameScript() 方法来停止在新创建的框架中加载您的脚本。例如,您可以这样做

js
browser.messageManager.removeDelayedFrameScript(
  "chrome://myextension/content/somescript.js",
);

界面更改

  • nsIURL 接口已发生了一些更改。nsIURL.param 属性已移除,并且 nsIURLParser.parsePath() 方法比以前少两个参数。
  • nsIBrowserHistory 中已移除两个方法:registerOpenPage()unregisterOpenPage()。这些方法已被弃用。
  • nsIEditorSpellCheck.saveDefaultDictionary() 方法已移除,作为支持每个站点的拼写检查设置的一部分。此外,nsIEditorSpellCheck.updateCurrentDictionary() 不再接受参数。
  • nsIGlobalHistory3 接口已被移除。其功能对插件的用处有限(如果有的话),因此这应该不会影响任何人。
  • 几个专门通道的属性已被合并到基本 nsIChannel 接口中。这根本不会影响兼容性,因为这些接口无论如何都继承自 nsIChannel

首选项更改

geo.wifi.* 首选项不再具有默认值,尽管如果它们存在则会受到尊重。如果您的代码读取这些内容而不处理它们不存在的情况,则需要更新您的代码以处理在它们不存在时抛出的异常。

XPConnect 更改

nodePrincipalbaseURIObject 已从 nsDOMClassInfo 移动到 XrayWrapper。这应该不会影响许多插件,因为只有在它们尝试在 DOM Node 对象上访问这些属性(来自使用 enablePrivilege() 请求了 XPConnect 权限的特权不足的脚本)时才会出现问题。

DOM 更改

  • 已移除长期废弃的方法 Navigator.taintEnabled()。这个方法很久以来就没有什么用处了,但经常用在浏览器检测脚本中,因为它特定于 Netscape。从 Firefox 9 开始,调用此方法会抛出异常。
  • 事件处理程序现在实现为标准 IDL 接口。在大多数情况下,这不会影响您,但 存在例外情况

其他可能影响二进制兼容性的更改

这些更改值得注意,因为它们可能会影响二进制 XPCOM 组件。无论如何,这些都需要重建,因为这是每个主要 Firefox 版本都需要的,但可能会引入编译时错误,因此特别值得注意。

  • nsIDOMHTMLDocument 接口现在有一个新的 scripts 属性,它实现了 Document.scripts 属性。
  • 已添加 nsIJumpListShortcut.iconImageUri() 方法,以便能够在 Windows 上的跳转列表 URI 条目上建立收藏夹图标。

主题更改

<tab> 元素已添加 pending 属性。如果存在此属性,则该选项卡正在由会话存储服务恢复。您可以在恢复过程中使用它来设置选项卡的样式。值得注意的是,如果用户启用了“选择前不加载选项卡”的首选项,则在选项卡加载之前,会在选项卡上设置 pending 属性。

类似地,选项卡现在还有一个 unread 属性;如果存在此属性,则表示自上次该选项卡成为活动选项卡以来,该选项卡已发生更改。您可以使用它来在用户上次查看它们后发生更改时以不同的方式设置选项卡的样式。这在当前会话中尚未查看的选项卡上也存在。