Firefox 8 开发者指南
Firefox 8 于 2011 年 11 月 8 日发布。本文为 Web 开发人员 和附加组件以及 Mozilla 项目开发人员 提供信息,以帮助充分利用此版本的特性。
Web 开发人员的更改
HTML
- 已添加
HTMLImageElement
的crossOrigin
属性,并在<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()
在窗口之间传递File
和FileList
对象。 - 在编辑
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 图像现在可以正确缩放,当用作背景图像时。
网络
WebSockets
WebSocket
对象的send()
方法不再错误地返回布尔值。WebSocket
对象的close()
方法现在与标准的当前草案相匹配,并且关闭事件现在正确地使用CloseEvent
接口。- 现在支持
WebSocket
对象的extensions
属性。 - WebSocket 构造函数现在支持协议数组以及单个协议字符串。
- WebSockets 不允许混合内容;也就是说,您不能再从安全内容打开到非安全 WebSocket 服务器的连接。
- WebSockets 的连接错误现在会触发
onerror
处理程序。 - WebSocket API 已更新至规范的最新草案(参见 Firefox bug 674890、Firefox bug 674527 和 Firefox 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()
以便于在特定分区中创建对象。
其他与 XPCOM 相关的更改
- 您现在可以通过执行 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()
方法,它们替换了用于错误和成功条件处理的旧单一方法。 nsIMemoryReporter
的KIND_MAPPED
属性已弃用,取而代之的是KIND_NONHEAP
,并添加了新的单位类型UNITS_COUNT_CUMULATIVE
和UNITS_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
接口也已删除。仍然可以使用 Worker
和 ChromeWorker
构造函数创建工作线程。
其他更改
- 当窗口最小化、取消最小化或在全屏和窗口模式之间切换时,它会收到
sizemodechange
事件。 - 您现在可以使用
extensions.autoDisableScopes
首选项 来禁用从特定附加组件安装位置自动安装附加组件。 Document
对象上的新mozSyntheticDocument
属性允许您确定文档是否为合成文档(例如,独立图像、视频或音频文件),而不是完整的标准 DOM 文档。例如,如果您希望在这种情况下呈现不同的用户界面(例如,根据这种情况以不同的方式添加上下文项),这将非常有用。- 您现在可以在打开
about:config
时指定过滤器;例如,“about:config?filter=sessionstore” 将仅显示与会话存储相关的首选项。