Firefox 8 开发者指南

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

Web 开发人员的更改

HTML

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

DOM

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

JavaScript

  • RegExp.exec()RegExp.test() 在没有参数的情况下调用时,现在与字符串“undefined”匹配。
  • String.search()String.match() 在没有参数或 undefined 的情况下调用时,现在与空字符串匹配,因此与每个字符串匹配。
  • 已使用新的(非标准)watch()unwatch() 方法实现了监视列表的支持。

CSS

  • <resolution> 现在接受 <number>,而不仅仅是 <integer> 值,如规范所述。
  • 在使用 hyphens 时,已为许多新语言添加了连字符规则。
  • 已修改 background-size 的处理方式,使其更接近规范。
  • 在过去,怪异模式下的 text-decoration 会调整后代文本的行粗细和位置以匹配后代。现在,标准模式和怪异模式的渲染更加相似。
  • 在许多情况下,元素的水平定位已更符合规范。对此的文档即将推出,但目前,请参阅 Firefox bug 682780,注释 23 以获取详细信息。
  • SVG 图像现在可以正确缩放,当用作背景图像时。

网络

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

WebSockets

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

WebGL

  • 跨域纹理 现在可以使用 CORS 批准。
  • 使用 Direct2D/Direct3D 10 进行跨进程渲染。

MathML

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

开发者工具

  • console 对象有一个新的 dir() 方法,该方法显示指定对象上属性的交互式列表。(参见 控制台对象)。

Mozilla 和附加组件开发人员的更改

请参阅 更新 Firefox 8 的附加组件,了解您可能需要进行哪些更改才能使您的附加组件与 Firefox 8 兼容。

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

XPCOM

Components.utils

已创建新的方法 Components.utils.createObjectIn()Components.utils.makeObjectPropsNormal() 以便于在特定分区中创建对象。

  • 您现在可以通过执行 new File 从组件代码实例化 DOM File 对象,而不是必须直接实例化 nsIDOMFile
  • 已移除 nsTPtrArray 数组类型。其功能现在都可以在 nsTArray 上使用,当使用指针类型实例化时,nsTArray 现在提供 SafeElementAt() 方法。

工作线程

ChromeWorker 中不再可以访问 XPCOM 对象。从 Firefox 错误 649537 开始,worker 上下文中已禁用 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 注册

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

接口更改

  • mozIJSSubScriptLoader.loadSubScript() 方法现在会在可能的情况下从启动缓存加载脚本。
  • 已从 nsIAccessNode 接口中删除 ownerWindow 属性。
  • 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 支持已被撤回。
  • nsISelection2 接口已合并到 nsISelectionPrivate 接口中。
  • nsISelection3 接口已合并到 nsISelection 接口中。
  • 出于性能原因,nsISessionStartup 属性状态现在是 jsval 而不是字符串。
  • 对于最小化的窗口,nsIDocShell 属性 isActive 现在为 false
  • nsIDownloadHistory.addDownload() 方法现在保存下载保存到本地文件系统中的目标位置。

已删除的接口

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

  • nsITimelineService
  • nsIDOMHTMLIsIndexElement

nsIWorkerFactory 接口也已删除。仍然可以使用 WorkerChromeWorker 构造函数创建工作线程。

其他更改

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

另请参阅