Firefox 9 开发者发行说明

Firefox 9 Windows 版于 2011 年 12 月 20 日发布。Mac 和 Linux 9.0.1 版(修复了在最后一刻发现的崩溃 bug)于 2011 年 12 月 21 日发布。

Web 开发人员的变更

HTML

  • 现在 <li> 元素的 value 属性可以是负值。以前,负值会被转换为 0。
  • 现在,在使用 <audio><video> 元素时,你可以在媒体的 URI 中指定媒体的开始和停止时间
  • <input><textarea> 元素现在在调用拼写检查器时会尊重 lang 属性的值。
  • <input> 元素与 type="file"accept="image/*" 一起使用时,Firefox Android 版现在允许用户无需离开浏览器即可使用手机摄像头拍照。
  • 现在支持 Windows Vista 风格的 PNG ICO 图像。
  • 当 CORS 获得授权时,绘制使用 crossorigin 属性请求 CORS 访问的图像不再错误地污染画布
  • rowspan 属性的值现在最大可以达到 65,534,高于之前的 8190。

CSS

  • 现在支持 font-stretch 属性。
  • 现在支持 columns 属性,带有 -moz 前缀。这是以下属性的简写:column-widthcolumn-count
  • 当使用 <link> 元素包含的样式表已完全加载并解析(但尚未应用于文档)时,现在会触发一个 load 事件。此外,如果在处理样式表时发生错误,则会触发一个 error 事件。
  • 现在,你可以使用 text-overflow 的新两值语法来指定内容的左边缘和右边缘的溢出设置。

JavaScript

无更改。

DOM

使用全屏模式

新的全屏 API 提供了一种使用整个屏幕呈现内容的方式,没有浏览器界面。这对于视频和游戏来说非常棒。此 API 目前处于实验阶段并带有前缀。

  • 现在已实现 Node.contains() 方法;这允许你确定给定节点是否是另一个节点的后代。
  • 现在已实现 Node.parentElement 属性;这会返回 DOM 节点的父 Element,如果父节点不是元素,则返回 null
  • 现在支持 DOM Level 3 合成事件
  • 现在已实现 Document.scripts 属性;这会返回文档中所有 <script> 元素的 HTMLCollection
  • 现在已实现 Document.queryCommandSupported() 方法。
  • <body> 元素可以监听的事件集已进行了修订,以符合 HTML5 规范的最新草案。DOM 事件指南中的事件列表反映了可以在 <body> 上监听哪些事件。
  • 现在,readystatechange 事件只在 Document 上触发,如预期的那样。
  • 事件处理器现在实现为标准 IDL 接口。在大多数情况下,这不会影响内容,但也有例外。
  • XMLHttpRequest 添加了一个新的响应类型 "moz-json",允许 XMLHttpRequest 自动为你解析 JSON 字符串;当你请求此类型时,返回的 JSON 字符串会被解析,因此 response 属性的值是生成的 JavaScript 对象。
  • XMLHttpRequest “进度”事件现在对于收到的每个数据块都会可靠地发送;过去,可能不会为收到的最后一个数据块触发“进度”事件。现在,你只需跟踪“进度”事件即可跟踪进度,而无需再监视“加载”事件来检测最后一个数据块的接收。
  • 过去,使用 null 监听器调用 addEventListener() 会抛出异常。现在它会在不出现错误且没有影响的情况下返回。
  • 新的 navigator.doNotTrack 属性允许你的内容轻松确定用户是否启用了其不跟踪偏好;如果此值为“yes”,则不应跟踪用户。
  • 当调用 splitText()normalize() 时,RangeSelection 对象现在按照其规范行事。
  • doctype 节点的 Node.ownerDocument 值现在是调用 createDocumentType() 创建该节点的文档,而不是 null
  • window.navigator.taintEnabled 已被移除;它已经很多年没有被支持了。

Worker

  • 在 Firefox 8 中,以 blob URL 实现的 Worker 已损坏,从 Firefox 9 开始再次工作。

WebGL

  • 现在支持 WebGL 上下文 drawingBufferWidthdrawingBufferHeight 属性。

MathML

  • 已移除 <maction> 元素的 actiontype 属性的非标准 restyle 值。
  • 虽然仍不受支持,但使用 mlabeledtr 元素不再完全破坏渲染。有关此元素实际支持的进展,请参阅 Firefox bug 689641

网络

  • 现在,你可以使用 XMLHttpRequest 发送 JavaScript 类型数组的内容(即 ArrayBuffer 对象的内容)。
  • WebSocket 连接现在允许在否则有效的 UTF-8 数据帧中接收非字符,而不是失败。
  • XSLT 请求的 HTTP Accept 头已更改为 */* 以简化。由于获取 XSLT 无论如何都会回退到 */*,因此简化初始请求是有意义的。
  • 服务器尝试使用 301 Moved Permanently307 Temporary Redirect 响应代码将用户重定向到 javascript: URI 的操作现在会导致“错误连接”错误,而不是实际重定向。这可以防止某些类型的跨站点脚本攻击。
  • 以前,提供空 Content-Disposition 的内容被视为 Content-Disposition 为“attachment”;这并不总是按预期工作。现在,这些内容被视为 Content-Disposition 为“inline”。
  • 磁盘缓存中项目默认最大大小已增加到 50 MB;以前,只有最大 5 MB 的项目会被缓存。

开发者工具

Mozilla 和附加组件开发者的更改

有关你可能需要对插件进行哪些更改才能使其在 Firefox 9 中工作的概述,请参阅为 Firefox 9 更新插件

XUL

  • 当标签页正在被会话存储服务恢复时,<xul:tab> 元素现在有一个 pending 属性,其值为 true。这可以用于在主题中设置标签页的样式。此属性不存在于非待定标签页上。
  • 当标签页自上次成为活动标签页以来已更改,或者自当前会话开始以来尚未被选择时,<xul:tab> 元素现在有一个 unread 属性,其值为 true。此属性不存在于未读标签页上。
  • 现在,你可以使用 <xul:panel> 作为 DOM 拖放操作的拖动图像。这允许你使用标准拖放 API 进行 XUL 内容的拖放。
  • <xul:notificationbox> 元素的 appendNotification() 方法现在允许你指定一个回调函数,该函数会在与通知框相关的有趣事件发生时被调用。目前,唯一的事件是“removed”,它会告诉你通知框已从其窗口中移除。

JavaScript 代码模块更改

  • FileUtils.jsm 现在有一个 File 构造函数,它返回一个表示由其路径名指定的文件 nsIFile 对象。

服务更改

  • 内容偏好设置服务现在处理隐私浏览模式(参见 Firefox bug 679784)。

NSPR

  • NSPR 现在有一个“append”模块,允许你将新数据附加到现有日志的末尾。

接口更改

已移除的接口

  • 在简化 Places 和 DocShell 代码时,nsIGlobalHistory3 已被移除。

杂项接口更改

  • nsISound 接口有一个新的常量 EVENT_EDITOR_MAX_LEN。这允许在文本字段中键入超过最大允许字符数时播放系统声音。目前,这仅在 Windows 上使用。
  • nsIScriptError2 接口有新的 timeStampinnerWindowID 属性;此外,initWithWindowID() 方法现在接受内部窗口 ID 而不是外部窗口 ID。
  • 已添加 nsIBidiKeyboard.haveBidiKeyboards 属性;这允许你确定系统是否为每个方向(从左到右和从右到左)至少安装了一个键盘。
  • 新的 nsIEditor.isSelectionEditable 属性允许你确定当前选择锚点是否可编辑。这有助于支持文档只有部分可编辑的情况,通过让你查看当前选择是否在可编辑部分中。
  • nsIBrowserHistory.registerOpenPage()nsIBrowserHistory.unregisterOpenPage() 方法已作为 Places 系统性能大修的一部分被移除。你可以使用 mozIPlacesAutoComplete 中的相应方法代替。
  • 已添加 nsIDOMWindowUtils.wrapDOMFile() 方法;它为给定的 nsIFile 返回一个 DOM File 对象。
  • 添加了 nsIChromeFrameMessageManager.removeDelayedFrameScript() 方法以支持移除延迟加载脚本。自举插件应在关闭时使用此方法,以移除使用 nsIChromeFrameMessageManager.loadFrameScript() 并设置延迟加载标志加载的任何脚本。这作为 browser.messageManager.removeDelayedFrameScript() 暴露给插件。
  • nsIAppStartup 接口有一个新的 interrupted 属性,它让你知道启动过程是否在任何时候被交互式提示中断。这在性能评估期间对启动时间进行计时时很有用,例如,能够从被中断的会话中删除数字。
  • nsIEditorSpellCheck 接口已修订,以支持按站点选择拼写检查词典。

IDL 解析器

IDL 解析器不再支持从未完全实现的唯一指针概念。

构建系统更改

  • 用于构建独立 XPConnect 的 --enable-application=standalone 选项已移除;它自 2007 年以来就从未工作过。
  • 已移除对构建独立 Necko 和 Transformiix XSLT 的支持;你不能再使用 --enable-application=network--enable-application=content/xslt
  • 构建系统现在在 $topsrcdir/.mozconfig$topsrcdir/mozconfig 中查找 .mozconfig,并且在其他任何地方都不查找,除非你使用 MOZCONFIG 环境变量覆盖 .mozconfig 路径。
  • SDK 中的 xpidl 工具已替换为 pyxpidl

其他更改

  • 拼写检查器不再对尝试拼写检查的单词长度施加任意 130 个字符的限制。此限制以前是为了防止拼写检查器中发生的崩溃,但底层 bug 已经修复。
  • 你现在可以使用“JavaScript-navigator-property”类别注册组件以向 window.navigator 对象添加功能。