Firefox 5 开发者发布说明
基于 Gecko 5.0 的 Firefox 5 于 2011 年 6 月 21 日发布。本文提供了有关此版本中影响开发人员的更改的信息链接。
Web 开发人员的变更
HTML
- 所有 HTML 元素现在都具有
accessKey属性,以及blur()、click()和focus()方法。这些都在HTMLElement接口中指定。 - 为了遵守 HTML5 规范,已删除对 UTF-7 和 UTF-32 字符集 的支持。
- 在怪异模式下,当匹配时,空的
<map>不再跳过,而是优先匹配非空元素。 - Android 上的 Firefox 移动版现在支持
@font-face的 WOFF 字体。 - 作为安全措施,WebGL 不再从原始域以外的域加载纹理。HTTP 访问控制 支持将在未来的某个时候实现,以更安全地实现这一点。
Canvas 改进
<canvas>2D 绘图上下文现在支持将ImageData对象指定为createImageData()方法的输入;这会创建一个新的ImageData对象,其尺寸与指定的对象相同,但所有像素仍预设为透明黑色。这已记录为已实现但尚未实现。- 通过调用
CanvasGradient方法addColorStop()添加颜色停止时指定非有限值,现在会正确抛出INDEX_SIZE_ERR而不是SYNTAX_ERR。 HTMLCanvasElement方法toDataURL()现在在匹配之前会正确地将指定的 MIME 类型转换为小写。getImageData()现在正确接受超出画布边界的矩形;画布外的像素将返回为透明黑色。drawImage()和createImageData()现在根据规范处理负参数,通过围绕适当的轴翻转矩形。我们需要一篇关于 CSS 大小调整 及其工作原理的文章。- 在调用
createImageData()时指定非有限值现在会正确抛出NOT_SUPPORTED_ERR异常。 - 如果指定的矩形小于一个像素,
createImageData()和getImageData()现在会正确返回至少一个像素的图像数据。 - 在调用
createRadialGradient()时指定负半径现在会正确抛出INDEX_SIZE_ERR。 - 在调用
createPattern()或drawImage()时指定null或undefined图像现在会正确抛出TYPE_MISMATCH_ERR异常。 - 为
globalAlpha指定无效值不再抛出SYNTAX_ERR异常;这些现在会正确地被静默忽略。 - 在调用
translate()、transform()、rect()、clearRect()、fillRect()、strokeRect()、lineTo()、moveTo()、quadraticCurveTo()或arc()时指定无效值不再抛出异常;这些调用现在会正确地被静默忽略。 - 将
shadowOffsetX、shadowOffsetY或shadowBlur的值设置为无效值现在会被静默忽略。 - 将
rotate或scale的值设置为无效值现在会被静默忽略。
CSS
- CSS 动画
-
已添加对 CSS 动画的支持,目前使用
-moz-前缀。
DOM
Selection对象的modify()方法已更改,以便“word”选择粒度不再包含尾随空格;这使其在不同平台之间更加一致,并与 WebKit 实现的行为匹配。setTimeout()和setTimeout()方法现在被限制在非活动选项卡中每秒发送不超过一次超时。此外,它现在将嵌套超时限制为 HTML5 规范允许的最小值:4 毫秒(而不是以前限制的 10 毫秒)。- 类似地,
Window.setInterval()和WorkerGlobalScope.setInterval()方法现在在非活动选项卡中每秒限制为不超过一次间隔。 XMLHttpRequest现在支持用于进度监听器的loadend事件。这在任何传输完成后发送(即,在abort、error或load事件之后)。您可以使用它来处理无论传输成功或失败都需要执行的任何任务。Blob以及由此扩展的File对象的slice()方法已被删除,并替换为一种新的建议语法,使其与 JavaScript 中的Array.slice()和String.slice()方法更加一致。此方法目前名为mozSlice()。Navigator.language的值现在通过查看Accept-LanguageHTTP 头 的值来确定。- 根据 DOM 规范的要求,
Element.prefix属性现在是只读的。 HTMLVideoElement现在支持实验性属性,以获取有关视频渲染统计信息(如帧率)的信息。
JavaScript
- 正则表达式不再可像函数一样调用;此更改已与 WebKit 团队协同进行,以确保兼容性(参见 WebKit bug 28285)。此功能已存在很长时间,但从未被记录(至少在 MDC 上没有)。
- 现在支持
Function.prototype.isGenerator()方法;这使您可以确定函数是否是生成器。 - 以下保留字 以前仅在严格模式下被视为保留;现在它们总是被视为保留:
class、enum、export、extends、import和super。 - 在 chrome 代码中创建的 DOM 文档不再能暴露给沙盒脚本。
- JSON 解析器已重写,以提高速度和合规性。这包括对 Firefox bug 572279 的修复。
SVG
classSVG 属性现在可以动画化。- 以下表示对象列表的 SVG 相关 DOM 接口现在可索引,并且可以像数组一样访问;此外,它们具有指示列表中项目数量的
length属性:SVGLengthList、SVGNumberList、SVGPathSegList和SVGPointList。
HTTP
- Firefox 不再发送
Keep-AliveHTTP 头;我们没有正确格式化它,而且它是多余的,因为我们无论如何也发送了带有“keep-alive”值的Connection或Proxy-Connection头。 - HTTP 事务模型已更新,使其在重用持久连接池中的连接方面更加智能;Necko 不再将连接池视为 FIFO 队列,而是尝试将池中的连接按拥塞窗口 (CWND) 从大到小排序。这可以通过在许多情况下避免需要增大连接窗口来减少 HTTP 事务的往返时间 (RTT)。
- 如果同时提供了
filename和filename*参数,Firefox 现在可以更有效地处理Content-DispositionHTTP 响应头;它会遍历所有提供的名称,如果存在filename*参数,即使filename参数首先包含,也会使用它。以前,会使用第一个匹配的参数,从而阻止使用更合适的名称。参见 Firefox bug 588781。
MathML
- 支持修饰运算符
开发者工具
- Web 控制台的
Console对象现在有一个debug()方法,它是其log()方法的别名;这提高了与某些现有站点的兼容性。
Mozilla 和附加组件开发者的更改
有关为 Firefox 5 更新附加组件的指南,请参阅为 Firefox 5 更新附加组件。
注意: Firefox 5 要求重新编译二进制组件,所有主要的 Firefox 版本都是如此。有关详细信息,请参阅 二进制接口。
JavaScript 代码模块的更改
新的 JavaScript 代码模块
- 添加了
Dict.jsm代码模块;它提供了用于键/值对字典的 API。
NetUtil.jsm
asyncFetch()方法现在支持将输入源指定为nsIInputStream。
接口更改
nsIHttpChannelInternal接口具有新的属性,可提供访问通道端点地址和端口的信息。此信息主要用于调试目的。<canvas>元素的width和height属性现在在 IDL 中反映为无符号整数而不是有符号整数(参见HTMLCanvasElement)。nsIAppStartup2和nsIAppStartup_MOZILLA_2_0接口已合并到nsIAppStartup接口中。nsIDocShell_MOZILLA_2_0_BRANCH接口已合并到nsIDocShell接口中。nsIFocusManager_MOZILLA_2_0_BRANCH接口已合并到nsIFocusManager接口中。nsIHTMLEditor_MOZILLA_2_0_BRANCH接口已合并到nsIHTMLEditor接口中。
新接口
- 添加了
nsIDOMAnimationEvent。AnimationEvent
已移除的接口
以下接口是不再需要的实现细节
nsICiter(参见 Firefox bug 633066)nsIDOM3Document(参见 Firefox bug 639849)nsIFIXptrEvaluatornsISelectElement(参见 Firefox bug 619996)
调试辅助工具
- 新的
DebugOnly<T>辅助工具使仅为DEBUG构建声明变量成为可能。
JavaScript API (SpiderMonkey)
- 已添加
JS_DoubleToInt32()和JS_DoubleToUint32(),用于将jsdouble值转换为 C 整数和无符号整数。
构建系统更改
- 您现在可以在没有
mozconfig文件的情况下构建 Firefox;--enable-application设置 现在默认为“browser”。拉取或下载代码后,您可以configure && make(或make -f client.mk) 来构建 Firefox。