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-width和column-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()时,Range和Selection对象现在按照其规范行事。 - doctype 节点的
Node.ownerDocument值现在是调用createDocumentType()创建该节点的文档,而不是null。 window.navigator.taintEnabled已被移除;它已经很多年没有被支持了。
Worker
- 在 Firefox 8 中,以 blob URL 实现的 Worker 已损坏,从 Firefox 9 开始再次工作。
WebGL
- 现在支持 WebGL 上下文
drawingBufferWidth和drawingBufferHeight属性。
MathML
- 已移除
<maction>元素的actiontype属性的非标准restyle值。 - 虽然仍不受支持,但使用
mlabeledtr元素不再完全破坏渲染。有关此元素实际支持的进展,请参阅 Firefox bug 689641。
网络
- 现在,你可以使用 XMLHttpRequest 发送 JavaScript 类型数组的内容(即
ArrayBuffer对象的内容)。 - WebSocket 连接现在允许在否则有效的 UTF-8 数据帧中接收非字符,而不是失败。
- XSLT 请求的 HTTP
Accept头已更改为*/*以简化。由于获取 XSLT 无论如何都会回退到*/*,因此简化初始请求是有意义的。 - 服务器尝试使用
301 Moved Permanently或307 Temporary Redirect响应代码将用户重定向到javascript:URI 的操作现在会导致“错误连接”错误,而不是实际重定向。这可以防止某些类型的跨站点脚本攻击。 - 以前,提供空
Content-Disposition的内容被视为Content-Disposition为“attachment”;这并不总是按预期工作。现在,这些内容被视为Content-Disposition为“inline”。 - 磁盘缓存中项目默认最大大小已增加到 50 MB;以前,只有最大 5 MB 的项目会被缓存。
开发者工具
- Web 控制台现在支持其日志记录方法中的基本字符串替换。
- 现在,你可以在 Web 控制台中创建视觉上嵌套的输出块,以帮助使其更易于阅读。
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接口有新的timeStamp和innerWindowID属性;此外,initWithWindowID()方法现在接受内部窗口 ID 而不是外部窗口 ID。- 已添加
nsIBidiKeyboard.haveBidiKeyboards属性;这允许你确定系统是否为每个方向(从左到右和从右到左)至少安装了一个键盘。 - 新的
nsIEditor.isSelectionEditable属性允许你确定当前选择锚点是否可编辑。这有助于支持文档只有部分可编辑的情况,通过让你查看当前选择是否在可编辑部分中。 nsIBrowserHistory.registerOpenPage()和nsIBrowserHistory.unregisterOpenPage()方法已作为 Places 系统性能大修的一部分被移除。你可以使用mozIPlacesAutoComplete中的相应方法代替。- 已添加
nsIDOMWindowUtils.wrapDOMFile()方法;它为给定的nsIFile返回一个 DOMFile对象。 - 添加了
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对象添加功能。