Firefox 8 开发者发行说明

Firefox 8 于 2011 年 11 月 8 日发布。本文为Web 开发者以及附加组件和 Mozilla 项目开发者提供了信息,以帮助充分利用此版本的功能。

Web 开发人员的变更

HTML

  • 已添加 HTMLImageElement crossOrigin 属性,并且已将 crossorigin 属性添加到 <img> 元素中。(参见 Firefox 错误 664299
  • HTMLSelectElement.add() 方法现在支持在新项目插入之前指定一个项目或项目的索引。以前它只支持指定一个项目。(参见 Firefox 错误 666200
  • HTMLIsIndexElement 构造函数已被移除。自 Firefox 4 之前,没有元素实现过此接口。
  • 现在支持 HTML5“上下文菜单”功能(contextmenu 属性),它允许你向原生上下文菜单添加自定义元素特定项目(此实现仍处于实验阶段,等待规范更改;参见 Firefox 错误 617528)。
  • 已为所有元素添加了对 HTMLElement.accessKeyLabel 属性的支持。
  • <input><textarea> 元素现在支持 selectionDirection 属性,并且它们的 setSelectionRange() 方法已更新,以支持可选地指定方向。
  • 如果大多数元素已通过使用 tabindex 属性变得可聚焦,并且用户随后聚焦了该元素,则会在其周围绘制焦点环。
  • 在一组嵌套的 <label> 元素中,点击事件不再触发多个

DOM

  • insertAdjacentHTML 方法已实现。
  • BlobBuilder 现在有一个 getFile() 方法,该方法将 Blob 的内容作为文件返回。
  • FileReaderSync 接口(FileAPI 的一部分)已实现。
  • 嵌套 <label> 中的事件处理已修复。
  • 你现在可以使用 window.postMessage() 在窗口之间传递 FileFileList 对象。
  • 在编辑 contenteditable 区域时,通过按回车键退出标题,或通过按两次回车键退出列表编辑模式,现在会返回到段落输入模式(即 <p> 块内的段落),而不是通过 <br> 元素分隔行。
  • 修复了一个错误,该错误导致在应用于 contenteditable 区域的第一行时,对齐无法正确生效。
  • 修复了一个错误,该错误导致在 contenteditable 区域开头按下删除或退格键时,如果存在上一个 contenteditable 块,则会影响该块。
  • Document.getSelection() 现在返回与 window.getSelection() 相同的 Selection 对象,而不是将其字符串化
  • HTML5 selectionDirection 属性使得可以定义可编辑文本中选择的方向。
  • HTMLMediaElement 现在有一个 seekable 属性,它返回一个 TimeRanges 对象。
  • HTMLMediaElement.preload 属性现在正确地反映为枚举值
  • 当使用无效值时,crossOrigin 属性默认为“Anonymous”。
  • 当默认 Cookie 设置按站点覆盖时,navigator.cookieEnabled 现在返回正确的信息。

JavaScript

  • 不带参数调用 RegExp.exec()RegExp.test() 现在会与字符串“undefined”进行匹配。
  • 不带参数或带 undefined 参数调用 String.search()String.match() 现在会与空字符串进行匹配,从而匹配所有字符串。
  • 通过新的(非标准)watch()unwatch() 方法实现了对监视列表的支持。

CSS

网络

  • 根据 RFC 2231RFC 5987,双引号不再被接受为编码的分隔符。
  • MIME 头部字段解析器(Content-Disposition)现在在参数中需要“=”。
  • 禁用 JavaScript 后,脚本不再下载。
  • 不再支持 SSL 2.0。

WebSocket

  • WebSocket 对象的 send() 方法不再错误地返回布尔值。
  • WebSocket 对象的 close() 方法现在与标准的当前草案匹配,并且关闭事件现在正确使用 CloseEvent 接口。
  • 现在支持 WebSocket 对象的 extensions 属性。
  • WebSocket 构造函数现在支持协议数组以及单个协议字符串。
  • WebSocket 不允许混合内容;也就是说,你不能再从安全内容打开与非安全 WebSocket 服务器的连接。
  • WebSocket 的连接错误现在会触发 onerror 处理程序。
  • WebSocket API 已更新到规范的最新草案(参见 Firefox 错误 674890Firefox 错误 674527Firefox 错误 674716)。
  • WebSocket 的 deflate-stream 扩展已被禁用;它已被弃用,并且破坏了与某些站点的兼容性。

WebGL

  • 现在可以通过 CORS 批准允许跨域纹理
  • 使用 Direct2D/Direct3D 10 的跨进程渲染。

MathML

  • 已添加对顶层 <math> 元素的 displaystyle 属性的支持。
  • 已纠正 <mtable>align 属性的负行号解释。

开发者工具

  • console 对象有一个新的 dir() 方法,它显示指定对象属性的交互式列表。

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

有关您可能需要使附加组件与 Firefox 8 兼容的更改指南,请参见更新 Firefox 8 的附加组件

注意: Firefox 8 要求重新编译二进制组件,所有主要的 Firefox 版本都如此。

XPCOM

Components.utils

已创建新的方法 Components.utils.createObjectIn()Components.utils.makeObjectPropsNormal(),以便更容易在特定隔离区中创建对象。

  • 你现在可以通过 new File 从组件代码实例化 DOM File 对象,而无需直接实例化 nsIDOMFile
  • nsTPtrArray 数组类型已被移除。其功能现在都可在 nsTArray 上获得,nsTArray 在使用指针类型实例化时现在提供 SafeElementAt() 方法。

Worker

不再可能从 ChromeWorker 访问 XPCOM 对象。自 Firefox 错误 649537 起,XPConnect 已在工作线程上下文中禁用。

XUL

  • 在对 contentDocument 的值调用 document.execCommand() 时出现的错误已修复。自 Firefox 3 以来,这已导致错误而不是正常工作。
  • 自举附加组件现在可以使用 chrome.manifest 文件加载 chrome。
  • 指定最大尺寸时,XUL 图像现在在两个方向上以相同的比例缩小。

构建系统更改

  • 以下构建配置选项已被移除

    • --enable-timeline
    • --disable-storage
    • --necko-disk-cache
  • 将 IDL 文件编译为头文件时,如果需要,会自动包含头文件 jspubtd.h。在使用 jsval 或 [implicit_jscontext] 的 IDL 文件中手动包含 jspubtd.h 和/或 jsapi.h 不再需要。

Chrome 注册

  • platformversion 标志可在 chrome.manifest 中用于指定 Gecko 版本兼容性。

接口更改

  • mozIJSSubScriptLoader.loadSubScript() 方法现在尽可能从启动缓存加载脚本。
  • ownerWindow 属性已从 nsIAccessNode 接口中移除。
  • nsIDOMStorageWindow 接口已合并到 nsIDOMWindow 接口中。
  • nsIDOMWindowInternal 接口的所有成员都已移至 nsIDOMWindow 接口。该接口本身(不带成员)仍可用于兼容性,直到 Firefox 9。
  • 为了提高性能,Places 数据库异步更新的回调处理已更改。参见新的 mozIVisitInfoCallback.handleResult()mozIVisitInfoCallback.handleError() 方法,它们取代了旧的用于错误和成功条件处理的单一方法。
  • nsIMemoryReporterKIND_MAPPED 属性已被弃用,取而代之的是 KIND_NONHEAP,添加了新的单位类型 UNITS_COUNT_CUMULATIVEUNITS_PERCENTAGE
  • nsIMemoryReporterManager 接口有一个新的 explicit 属性,它报告显式内存分配的总大小。
  • nsIMemoryReporterManager 接口有一个新的 resident 属性,它报告使用的物理内存量。
  • nsINetworkLinkService 接口有一个新的属性 linkType。此属性提供正在使用的网络连接类型。所有操作系统目前都返回 LINK_TYPE_UNKNOWN。Android 支持因 perceived 安全问题而被撤回。
  • nsISelection2 接口已合并到 nsISelectionPrivate 接口中。
  • nsISelection3 接口已合并到 nsISelection 接口中。
  • 由于性能原因,nsISessionStartup 属性状态现在是 jsval 而不是字符串。
  • 对于最小化窗口,nsIDocShell 属性 isActive 现在为 false
  • nsIDownloadHistory.addDownload() 方法现在保存下载在本地文件系统中的目标。

已移除的接口

以下接口是不再需要的实现细节

  • nsITimelineService
  • nsIDOMHTMLIsIndexElement

nsIWorkerFactory 接口也已被移除。仍然可以使用 WorkerChromeWorker 构造函数创建 Worker。

其他更改

  • 当窗口最小化、取消最小化或在全屏和窗口模式之间切换时,它会收到一个 sizemodechange 事件。
  • 您现在可以使用 extensions.autoDisableScopes 首选项来禁用来自特定附加组件安装位置的附加组件的自动安装。
  • Document 对象上的新 mozSyntheticDocument 属性可让您确定文档是否是合成的(即,像独立的图像、视频或音频文件一样),而不是完整、标准的 DOM 文档。这可能很有用,例如,如果您想在这种情况下呈现不同的用户界面(例如,根据这种情况以不同的方式添加上下文项目)。
  • 您现在可以在打开 about:config 时指定过滤器;例如,about:config?filter=sessionstore 将仅显示与会话存储相关的首选项。