Firefox 4 开发者版
Firefox 4 于 2011 年 3 月 22 日发布,增强了性能,增加了对 HTML5 和其他不断发展的网页技术的更多支持,并进一步提高了安全性。本文提供有关此版本的信息,以及针对网页开发者、附加组件开发者和 Gecko 平台开发者等的功能。
针对网页开发者的功能
HTML
- 认识 HTML5 解析器
-
了解 HTML5 解析器对您的意义,以及如何将 SVG 和 MathML 内联嵌入到您的内容中。
- HTML5 中的表单
-
了解网页表单的改进。这些变更包括在
<input>
元素中添加了输入类型,数据验证等等。 - HTML5 部分
-
Gecko 现在支持与文档中部分相关的新 HTML5 元素:
<article>
、<section>
、<nav>
、<aside>
、<hgroup>
、<header>
和<footer>
。 -
此属性对所有元素通用,用于隐藏网页中当前与用户无关的内容。
- 其他 HTML5 元素
-
Gecko 现在还支持以下新的 HTML5 元素:
<mark>
、<figure>
和<figcaption>
。 - WebSocket
-
使用新的 WebSocket API 进行网页应用程序与服务器之间实时通信的指南。请注意,Firefox 4 中实现的 WebSocket 与最终标准不兼容,一般不应使用。
Canvas 改进
对 CanvasRenderingContext2D
接口进行了以下更改,以使我们的 <canvas>
实现更符合规范
- 在调用
arc()
时指定负半径现在会正确抛出INDEX_SIZE_ERR
异常。 - 在调用
createLinearGradient()
和createRadialGradient()
时指定非有限值现在会抛出NOT_SUPPORTED_ERR
而不是SYNTAX_ERR
。 - 将
miterLimit
设置为负值不再抛出异常;而是会正确忽略非正值。 - 将
lineWidth
设置为负值不再抛出异常;而是会正确忽略非正值。 putImageData()
方法现在支持可选参数dirtyX
、dirtyY
、dirtyWidth
和dirtyHeight
。
其他 HTML 变更
<textarea>
元素现在默认可调整大小;您可以使用resize
CSS 属性来禁用此功能。canvas.getContext
和canvas.toDataURL
在使用无法识别的参数调用时不再抛出异常。<canvas>
元素现在支持 Mozilla 特定的mozGetAsFile()
方法,该方法允许您获取一个包含画布内容图像的基于内存的文件。有关详细信息,请参阅HTMLCanvasElement
。canvas2dcontext.lineCap
和canvas2dcontext.lineJoin
在设置为无法识别的值时不再抛出异常。canvas2dcontext.globalCompositeOperation
在设置为无法识别的值时不再抛出异常,并且不再支持非标准的darker
值。- 已删除对已废弃的
<spacer>
元素的支持,该元素在所有其他浏览器中都不存在。 <isindex>
元素(通过调用document.createElement()
创建)现在被创建为一个没有属性或方法的简单元素。 有关此方面的文档尚未编写;请考虑贡献!- Gecko 现在支持对
<input>
元素调用click()
来打开文件选择器。请参阅文章 使用网页应用程序中的文件 中的 示例。 <input>
元素支持一个新的mozactionhint
属性,该属性允许您指定虚拟键盘上 Enter 键的标签。<script>
元素位于<iframe>
、<noembed>
和<noframes>
元素内部时,现在会执行,而在 Firefox 的先前版本中不会执行。这符合规范,并且与其他浏览器的行为一致。
CSS
- CSS 过渡
-
Firefox 4 中提供新的 CSS 过渡支持。
- CSS 中的计算值
-
已添加对
-moz-calc
的支持。这允许您将<length>
值指定为数学表达式。 - 选择器分组
-
支持
:-moz-any
来对选择器进行分组并对组合器进行分解。 - 背景图像子矩形支持
-
-moz-image-rect()
函数允许使用图像的子矩形作为background-image
。 - CSS 触摸属性
-
已添加对触摸属性的支持。详细信息以及真实文章名称将在稍后提供。
- 使用任意元素作为 CSS 背景
-
您可以使用
-moz-element
CSS 函数和document.mozSetImageElement()
DOM 函数来使用任意 HTML 元素作为背景。 - 隐私和 :visited 选择器
-
已对使用 CSS 选择器可以获取的有关访问链接的样式的信息进行了更改。这可能会影响某些网页应用程序。
新的 CSS 属性
属性 | 描述 |
-moz-font-feature-settings |
允许您自定义 OpenType 字体的先进功能。 |
-moz-tab-size |
在渲染文本时指定制表符字符 (U+0009) 的宽度(以空格字符为单位)。 |
resize |
允许您控制元素可以调整大小的维度。 |
新的 CSS 伪类
伪类 | 描述 |
:-moz-handler-crashed |
用于设置其插件已崩溃的元素的样式。 |
:-moz-placeholder |
应用于表单字段中的占位符文本。 |
:-moz-submit-invalid |
在表单中一个或多个字段未验证时应用于提交按钮。 |
:-moz-window-inactive |
应用于非活动窗口中的元素。 |
:invalid |
当 <input> 字段的内容无效时,会自动应用于该字段。 |
:optional |
自动应用于未指定 required 属性的 <input> 字段。 |
:required |
自动应用于指定了 required 属性的 <input> 字段。 |
:valid |
当 <input> 字段的内容验证成功时,会自动应用于该字段。 |
新的 CSS 伪选择器
伪选择器 | 描述 |
:-moz-focusring |
允许您指定当 Gecko 认为应该渲染焦点指示时元素的外观。 |
新的 CSS 函数
函数 | 描述 |
:-moz-any |
允许您对选择器进行分组并对组合器进行分解。 |
-moz-calc |
允许您将 <length> 值指定为数学表达式。 |
-moz-element |
允许您使用任意元素作为 background-image 和 background 的背景。 |
-moz-image-rect |
允许您使用图像的子矩形作为 background-image 或 background 。 |
已重命名的 CSS 属性
旧名称 | 新名称 | 说明 |
---|---|---|
-moz-background-size |
background-size |
不再支持名称 -moz-background-size 。 |
-moz-border-radius |
border-radius |
旧名称会得到有限时间的支持,以使您有时间更新您的网站。渲染更改也已进行,以匹配规范的最新版本。 |
-moz-box-shadow |
box-shadow |
其他 CSS 变更
- 出于健壮性和性能方面的考虑,
text-shadow
属性现在将模糊半径限制为 300px。 overflow
属性不再应用于表格组元素 (<thead>
、<tbody>
和<tfoot>
)。-moz-appearance
属性现在支持-moz-win-borderless-glass
值,该值会对元素应用无边框的 Aero Glass 外观。- 已添加
-moz-device-pixel-ratio
媒体功能,允许在 媒体查询 中使用每个 CSS 像素的设备像素比率。 - Gecko 对 CSS
<length>
单位的处理进行了修改,使其更符合其他浏览器,并更准确地根据设备的 DPI 将绝对长度转换为屏幕像素计数。
图形和视频
- WebGL
-
Firefox 现在支持正在开发的 WebGL 标准。
- 优化图形性能
-
在 Firefox 4 中充分发挥图形和视频性能的技巧和窍门。
- 支持 WebM 视频
-
Gecko 2.0 支持新的开放式 WebM 视频格式。
- 使用 SMIL 的 SVG 动画
-
现在可以使用 SMIL 动画 SVG。
- 使用 SVG 作为图像和 CSS 背景
-
现在可以使用
<img>
元素以及 CSSbackground-image
使用 SVG。 - 媒体
buffered
属性支持 -
现在支持
<video>
和<audio>
元素的buffered
属性,允许您确定媒体文件的哪些范围已缓冲。已经实现了TimeRanges
DOM 接口来支持此功能。 - 媒体
preload
属性 -
已经实现了 HTML5 规范中的
preload
属性,取代了以前实现的(不再支持的)autobuffer
属性。这会影响<video>
和<audio>
元素以及nsIDOMHTMLMediaElement
接口。 - SVG 文本定位改进
-
现在可以为 SVG
<text>
和<tspan>
元素的x
、y
、dx
和dy
属性的值指定列表。这允许您单独控制字符串中每个字符的定位。
DOM
- JavaScript 类型化数组
-
已添加对 JavaScript 类型化数组的支持;这允许您使用原生数据类型操作包含原始数据的缓冲区。包括 File API、WebGL 和 WebSockets 在内的多个 API 使用此功能。
- 获取范围的边界矩形
-
Range
对象现在具有range.getClientRects()
和range.getBoundingClientRect()
方法。 - 捕获任意元素上的鼠标事件
-
已添加对源自 Internet Explorer 的
setCapture()
和releaseCapture()
API 的支持。请参见 Firefox 错误 503943。 - 操作浏览器历史记录
-
现在,通过
window.history
对象可用的现有文档历史记录对象支持新的 HTML5pushState()
和replaceState()
方法。 - 使用 MozBeforePaint 的动画
-
添加了一个新事件,它与
window.mozRequestAnimationFrame()
方法和window.mozAnimationStartTime
属性一起提供了一种创建相互同步的动画的方法。 - 触摸和多点触控事件
-
已添加对触摸和多点触控事件的支持。
HTML 元素的 DOM 接口已更改
几个 HTML 元素的 DOM 接口已更改为 HTML5 规范中要求的接口,如下所示。
Firefox 3.6 中的接口 | Firefox 4 中的接口 | HTML 元素 |
---|---|---|
HTMLSpanElement |
HTMLElement |
<abbr> 、<acronym> 、<address> 、<b> 、<bdo> 、<big> 、<blink> 、<center> 、<cite> 、<code> 、<dd> 、<dfn> 、<dt> 、<em> 、<i> 、<kbd> 、<listing> 、<nobr> 、<plaintext> 、<s> 、<samp> 、<small> 、<strike> 、<strong> 、<sub> 、<sup> 、<tt> 、<u> 、<var> 、<xmp> |
HTMLDivElement |
HTMLElement |
<noembed> 、<noframes> 、<noscript> |
HTMLWBRElement |
HTMLElement |
<wbr> |
其他 DOM 更改
- 现在可以通过 DOM(通过
wrap
DOM 属性)控制<textarea>
元素的包装。请参见 Firefox 错误 41464 - 使用
document.createElement()
创建并插入文档的<script>
元素现在默认情况下会按照 HTML5 规范执行。具有src
属性的脚本在可用后立即执行(不维护顺序),而没有src
属性的脚本则同步执行。要使具有src
属性的插入脚本按插入顺序执行,请为其设置.async=false
。 - DOM
file
对象现在提供url
属性。 - 对 XMLHttpRequest 的 FormData 支持。
- 已实现
element.isContentEditable
属性。 document.currentScript
属性允许您确定当前正在执行哪个<script>
元素的脚本。在脚本元素执行之前和之后会触发新的element.onbeforescriptexecute
和element.onafterscriptexecute
事件。- 已将
mozSourceNode
属性添加到DragTransfer
对象中。 - 已将
selection.modify()
方法添加到Selection
对象中;这允许您轻松地更改浏览器窗口中的当前文本选择或光标位置。 - 对
window.open
的window.directories
对象和directories
功能的支持已删除,因为其他任何浏览器都不支持这些功能。请改用personalbar
。请参见 Firefox 错误 474058 - 已将
event.mozInputSource
属性添加到 DOM 用户界面事件中;此非标准属性允许您确定生成事件的设备类型。 - 已实现
document.onreadystatechange
事件。 - 在怪癖模式下,
document.createElement
方法不再接受标签名称周围的<
和>
。 - 已添加
element.setCapture()
和document.releaseCapture()
方法,允许元素在mousedown
事件发生后,即使鼠标位于其正常跟踪区域之外,也能继续跟踪鼠标事件。 - 已添加
window.mozPaintCount
属性;它允许您确定文档已绘制的次数。这在测试 Web 应用程序的性能时可能很有用。 - 已从
window.navigator.appVersion
和window.navigator.userAgent
中删除了语言标记。请改用window.navigator.language
或 Accept-Language 标头。请参见 Firefox 错误 572656 - XMLHttpRequest 对象现在使用 Gecko 特定的
mozResponseArrayBuffer
属性,将响应公开为 JavaScript 类型化数组以及字符串。 - 鼠标事件 现在包含一个
mozPressure
属性,指示支持压感输入设备的压力量。 URL.createObjectURL()
和URL.revokeObjectURL()
方法允许您创建引用本地文件的对象 URL。DOMImplementation.createHTMLDocument()
方法允许您创建新的 HTML 文档。Node.mozMatchesSelector()
现在会抛出SYNTAX_ERR
异常(而不是错误地返回false
),如果指定的 selector 字符串无效。- 现在可以使用与 CSS 相同的简写语法设置元素的 SVG 属性的值。例如:
element.style.fill = 'lime'
。有关详细信息,请参见element.style
。 - 文档根节点现在具有
privatebrowsingmode
属性,该属性描述了隐身模式的状态,包括指示隐身模式是临时还是永久性会话。 window.getComputedStyle()
方法的第二个参数现在是可选的,就像在所有其他主要浏览器中一样。- DOM
StorageEvent
对象现在与规范的最新版本匹配。 setTimeout()
方法的最小允许延迟现在是一个首选项,即dom.min_timeout_value
。- 由于存在潜在的安全问题,不再默认发送
MozAfterPaint
事件。可以通过设置首选项重新启用它。
安全
- 内容安全策略 (CSP)
-
内容安全策略 (CSP) 是 Mozilla 的一项提案,旨在帮助 Web 设计师和服务器管理员指定其网站上的内容如何交互。目标是帮助检测和缓解攻击,包括跨站点脚本攻击和数据注入攻击。
- HTTP 严格传输安全
-
HTTP 严格传输安全是一种安全功能,它允许网站告诉浏览器,它应该只使用 HTTPS 与其通信,而不是使用 HTTP。
- X-FRAME-OPTIONS 响应头
-
在 Internet Explorer 8 中引入的 X-FRAME-OPTIONS HTTP 响应头现在已得到 Firefox 的支持。这允许网站指示其页面是否可以用于框架,以及如果可以,是否限制为同一来源。
- 用户代理字符串 更改
-
为了减少 HTTP 请求中发送的数据量和熵(参见 Firefox 错误 572650),加密强度和语言标记已从用户代理字符串中删除。
JavaScript
有关 JavaScript 1.8.5 中实施的更改概述,请参见 JavaScript 1.8.5 中的新增功能。Firefox 4 中的 JavaScript 将更加符合 ECMAScript 5 标准。
开发者工具
- 使用 Web 控制台
-
Web 控制台工具是 Web 开发人员和扩展开发人员的有用调试工具。
注意:从 Gecko 2.0 开始,错误控制台默认情况下处于禁用状态。您可以通过将 devtools.errorconsole.enabled
首选项更改为 true
并重新启动浏览器来重新启用它。
针对 Mozilla 和附加组件开发者的变更
有关更新 Firefox 4 的现有扩展的实用技巧,请参见 更新 Firefox 4 的扩展。有几个关键更改会导致与现有附加组件不兼容,因此请务必阅读该文章。
如果您是主题开发人员,您应该阅读 Firefox 4 中的主题更改 以了解您需要了解的一些关键更改。
JavaScript 代码模块
- Services.jsm
-
Services.jsm
代码模块提供获取器,使您可以轻松地获取对常用服务的引用,例如首选项服务或窗口中介器,等等。 - JS-ctypes API
-
JS-ctypes API 使您能够调用与 C 兼容的外部库函数,而无需使用 XPCOM。
- 附加组件管理器
-
新的附加组件管理器提供有关已安装附加组件的信息,支持管理它们,并提供安装和删除附加组件的方法。
- PopupNotifications.jsm
-
新的弹出通知模块使您可以轻松地向用户呈现有吸引力的非模态通知。您可以在 使用弹出通知 中了解如何使用此 API。
- 从 chrome: URL 加载代码模块
-
您现在可以使用 chrome: URL 加载 JavaScript 代码模块,即使在 JAR 文件内部也是如此。
- DownloadLastDir.jsm
-
DownloadLastDir.jsm
代码模块提供gDownloadLastDir
全局变量,该变量包含一个字符串,您可以使用它来了解上次下载发生的目录的路径。此模块为您处理与私人浏览相关的問題。 - 使用 PerfMeasurement.jsm 代码模块衡量性能
-
PerfMeasurement.jsm
代码模块提供一个 API 用于在 JavaScript 代码中衡量 CPU 级别的性能数据。
代码模块的杂项更改
NetUtil.jsm
代码模块现在提供readInputStreamToString()
方法,该方法允许您将来自流的任意字节读入字符串,即使流包含零也是如此。- XPCOMUtils.jsm 代码模块现在提供 IterSimpleEnumerator() 和 IterStringEnumerator() 帮助器以迭代 XPCOM 枚举器。
- 您现在可以 在 JavaScript 代码模块中使用工作线程。
DOM 更改
ChromeWorker
-
一种用于特权代码的新型工作线程;这使您能够从扩展和应用程序代码中的工作线程中使用 js-ctypes 等功能。
- 触摸事件
-
已添加对(非标准)触摸事件的支持;这些事件使您能够跟踪多个手指在触摸屏上同时移动。
其他 DOM 更改
- 当文档的根元素创建时,但在其上执行任何脚本之前,将发送 新的“document-element-inserted”通知。
XUL
对 tabbrowser 元素的更改
对 <xul:tabbrowser>
元素进行了一些更改,这些更改会影响与选项卡交互的扩展。除了支持应用程序选项卡外,这些更改还将选项卡栏更改为标准工具栏,这使得用户可以将工具栏按钮拖动到其中。
TabClose
、TabSelect
和TabOpen
事件不再冒泡到<xul:tabbrowser>
元素(gBrowser
)。这些事件的事件侦听器应该添加到gBrowser.tabContainer
而不是直接添加到gBrowser
。- 选项卡上下文菜单不再是
<xul:tabbrowser>
的匿名子项。因此,它可以直接用 XUL 覆盖层覆盖。它也可以通过gBrowser.tabContextMenu
在 JavaScript 中更直接地访问。有关更多详细信息,请参见 这篇博文。 - 添加了新的
visibleTabs
属性,使您可以获取当前可见选项卡的数组;这使您能够确定当前选项卡集中哪些选项卡可见。例如,Firefox Panorama 使用它。 - 添加了新的
showOnlyTheseTabs
方法;Firefox Panorama 使用它。 - 添加了新的
getIcon
方法,使您无需提取<xul:browser>
元素即可获取选项卡的收藏夹图标。 - 添加了新的
tabbrowser.tabs
属性,使您可以轻松地获取<xul:tabbrowser>
元素中的选项卡列表。 - 新的
pinTab
和unpinTab
方法使您可以固定和取消固定选项卡(也就是说,在应用程序选项卡和常规选项卡之间切换它们)。 - 向
<xul:tabbrowser>
添加了getTabModalPromptBox
方法和tabmodalPromptShowing
属性以支持选项卡模态警报。
对弹出窗口的更改
- 不再支持
<xul:popup>
元素;您应该使用<xul:menupopup>
代替。(如果您继续使用popup
,您将遇到故障,因为该元素不再具有特殊含义。例如,<xul:menuseparator>
在<xul:popup>
中使用时可能会显示为透明。) <xul:menupopup>
XUL 元素现在有一个triggerNode
属性,它指示导致弹出窗口打开的事件发生的节点。这也要求向openPopup
方法添加一个触发事件参数。此外,添加了anchorNode
属性;它返回创建弹出窗口时指定的锚点。<xul:panel>
元素现在提供fade
和flip
属性,它们用于配置新的“箭头”样式通知面板的行为。
远程 XUL 支持已移除
不再支持远程 XUL;这会影响通过 HTTP 提供的 XUL 文档;此外,您不再可以使用 file://
URL 加载 XUL 文档,除非您创建首选项 dom.allow_XUL_XBL_for_file
并将其设置为 true
。但是,有一个白名单功能可用于允许特定域加载远程 XUL。
其他 XUL 更改
readonly
属性现在可以正确地适用于 XBL 字段。<xul:resizer>
元素现在允许您使用element
属性来指定要调整大小的元素,而不是调整窗口大小。<xul:resizer>
元素现在有一个type
属性,允许您指定调整大小器是用于窗口还是元素,以防止窗口调整大小器被绘制两次。"active"
属性不再设置在活动 XUL 窗口上。相反,您可以使用新的:-moz-window-inactive
伪类来为背景窗口分配不同的样式。emptytext
属性现在已弃用;您应该使用placeholder
代替。<xul:window>
元素现在提供accelerated
属性;如果为真,则允许硬件层管理器加速窗口。<xul:stack>
元素现在支持bottom
和right
属性。- 事件现在在
<xul:toolbox>
自定义期间触发,允许您检测对工具栏的更改。 <xul:tree>
元素的alternatingbackground
属性不再受支持;您可以使用:-moz-tree-row
伪类代替。- 带有 anonid chevronPopup 的书签工具栏溢出按钮不再是匿名的;它有一个 ID 为“PlacesChevron”。
<xul:tabs>
元素现在有一个tabbox
属性,替换了旧的_tabbox
属性,该属性已弃用(并且从未被记录)。- XUL
<xul:window>
元素现在具有drawintitlebar
属性;如果为true
,则窗口的内容区域将包括标题栏,允许在标题栏中绘制。 - 新的
TabPinned
和TabUnpinned
事件可用,使您能够检测何时固定和取消固定选项卡。 - 新的
TabAttrModified
事件在选项卡的label
、crop
、busy
、image
或selected
属性更改时发送。 <xul:tab>
元素现在有一个pinned
属性,使您能够确定选项卡当前是否已固定。<xul:tree>
元素上的setDirectionIndicator
类已经有一段时间没有做任何事情了;现在它完全不再使用。<xul:window>
元素现在有一个chromemargin
属性,使您能够设置窗口两侧镀铬和内容之间的边距;例如,您可以使用它在标题栏中绘制。<xul:window>
元素现在有一个disablechrome
属性;当它用于显示浏览器内 UI(如about:addons
)时,这用于隐藏窗口的大部分镀铬部分。<xul:window>
元素现在有一个disablefastfind
属性,允许您在内容不支持时禁用窗口中的查找栏。例如,附加组件面板使用它。- 工具栏现在可以是工具箱外部的,但仍然被视为
<xul:toolbox>
的成员,方法是设置<xul:toolbar>
的toolboxid
属性。此外,<xul:toolbox>
元素现在有一个externalToolbars
属性,它列出了被视为工具箱成员的所有工具栏。 - 添加了对记录 XUL 模板以进行调试的支持。
影响开发人员的 UI 更改
存储
其他存储 API 更改
mozIStorageBindingParamsArray
接口现在有一个 length 属性,它表示数组中的mozIStorageBindingParams
对象的数量。- 如果指定的
mozIStorageBindingParamsArray
为空,则mozIStorageStatement.bindParameters()
方法现在将返回错误。 - 添加了
mozIStorageConnection.clone()
方法,该方法允许您克隆现有数据库连接。 - 添加了
mozIStorageConnection.asyncClose()
方法,允许您异步关闭数据库连接;您需要指定一个回调函数,以便在关闭操作完成后收到通知。 - 添加了
mozIStorageConnection.setGrowthIncrement()
方法,允许您指定数据库文件每次增长的字节数,以帮助 SQLite 减少碎片。 SQLITE_CONSTRAINT
错误现在报告为NS_ERROR_STORAGE_CONSTRAINT
而不是NS_ERROR_FAILURE
。
XPCOM
除了下面提到的特定更改之外,需要注意的是,不再有任何冻结的接口。现在所有接口都已解冻,无论文档中可能写了什么。我们将逐步更新文档。
- Gecko 2.0 中的 XPCOM 更改
-
有关 XPCOM 更改的详细信息,这些更改会影响 Firefox 4 中的兼容性。
- Components.utils.getGlobalForObject()
-
此新方法返回与对象关联的全局对象;它取代了现在已删除的
__parent__
的常见用例。
Places
- Places 查询结果现在可以由多个观察者观察,并且查询可以异步执行。这意味着
nsINavHistoryResult
、nsINavHistoryQueryOptions
和nsINavHistoryContainerResultNode
接口发生了一些变化。更重要的是,nsINavHistoryResultViewer
接口已重命名为nsINavHistoryResultObserver
。 - 添加了一些新的通知,以使浏览器能够更可靠地跟踪 Places 服务的关闭过程。其中,大多数仅供内部使用,但
places-connection-closed
通知可用于了解 Places 服务何时完成了关闭过程。 - 几个 Places 方法上的数组大小输出参数现在是可选的。
- 对
<menupopup type="places">
的支持已被删除。相反,您需要手动创建并填充菜单,其中包含 Places 信息,而不是让它自动完成。有关详细信息,请参阅使用视图显示 Places 信息:菜单视图。
接口更改
nsIDocShell
和nsIWebBrowser
接口现在都有一个新的isActive
属性,它用于允许针对当前不可见文档的代码路径进行优化。nsIMemory
方法nsIMemory.isLowMemory()
已被弃用。您应该使用“内存压力”通知 来监视低内存情况。- 用于处理 HTTP 通道上的重定向的 API 已更改,使其可以异步处理。任何使用
nsIChannelEventSink.onChannelRedirect()
实现重定向处理的代码都需要更新为使用nsIChannelEventSink.asyncOnChannelRedirect()
。它接受一个回调处理程序,该处理程序必须在重定向成功完成时调用。 - 添加了
nsINavHistoryResultObserver.batching()
方法,提供了一种将 Places 操作分组到批次中的方法,从而减少了传送的更新通知数量,这可以在观察者执行相对复杂的任务(如刷新视图)时提高性能。 - 长期过时的
nsIPref
接口终于被删除。如果您还没有切换到nsIPrefService
,现在就是时候了。 nsISessionStore
和nsISessionStartup
接口收到了更改,以支持按需会话恢复。请参阅nsISessionStore.restoreLastSession()
方法。nsIPrincipal
方法nsIPrincipal.subsumes()
和nsIPrincipal.checkMayLoad()
以及其origin
、csp
和URI
属性现在可以在脚本中使用;以前它们只能在本地代码中使用。nsIPrompt
接口现在支持选项卡模式警告;有关详细信息,请参阅使用选项卡模式提示。nsIEffectiveTLDService.getPublicSuffixFromHost()
方法现在可以正确拒绝以句点(“.”)开头的主机名。mozIJSSubScriptLoader.loadSubScript()
方法现在有一个可选参数,允许您指定脚本的字符集;如果没有提供,则假定为 ASCII(如以前总是假设的那样)。nsIAccessProxy
接口已被删除。它是一个实现细节,已经失去了其用处。- 为 Firefox Mobile 添加了
nsIContentView
和nsIContentViewManager
接口。它表示一个可滚动的内容视图,其内容实际上是由另一个进程绘制的。 - 添加了
nsIDiskCacheStreamInternal
接口。 - 添加了
nsIExternalURLHandlerService
接口。 - 添加了
nsISyncJPAKE
接口。请参阅 Firefox 错误 601645。 nsIINIParserWriter
接口是在 Gecko 1.9.2.4 中添加的,以支持写入 INI 文件。
内存管理
- 不可失败的内存分配
-
Mozilla 现在提供了不可失败的内存分配器,这些分配器保证不会返回 null。您应该阅读本文以了解它们的工作原理以及如何显式请求不可失败与不可失败的内存分配。
其他变更
- Firefox 中包含的大多数资源都已合并到一个单独的 JAR 存档
omni.jar
中,这通过减少 I/O 来提高启动性能。有关详细信息,请阅读关于 omni.jar。 - 不再支持
accessibility.disablecache
首选项;它只为调试目的公开,现在不再使用。 - GUID 从一个版本更改为另一个版本的附加组件现在可以正确更新。
- 作为从附加组件包中删除平台特定目录的副作用,您不再可以为每个平台提供不同的默认首选项。
- 默认情况下,附加组件在安装时不再解压缩,而是直接从 XPI 文件运行。附加组件可以使用安装清单中的unpack 属性来选择旧的行为。使用二进制组件、使用js-ctypes 加载的 DLL、搜索插件、字典和窗口图标的附加组件必须指定它们需要解压缩。使用创建 SQLite 数据库或从与附加组件目录相关的文件系统中复制内容的附加组件也可能需要更改其代码。
- 您现在可以包含在应用程序启动时自动安装的附加组件,这些附加组件位于自定义的 Firefox 中。
其他变更
- 仅加载根 chrome.manifest 文件
-
现在仅加载根
chrome.manifest
文件;如果您需要加载辅助清单文件,可以使用根chrome.manifest
中的manifest
命令来加载它们。 - Gopher 支持已删除
-
Gopher 协议不再被本地支持。通过OverbiteFF 扩展可以继续支持它。
- 内容进程事件处理
-
为了支持进程外插件和其他多进程功能,引入了新的 API 来支持在进程之间发送消息。
- 引导式扩展
-
您现在可以创建可以在不重启浏览器的情况下安装、卸载和升级(或降级)的扩展。
- 默认插件已删除
-
默认插件已被删除。应用程序插件文件夹默认情况下也被删除,但仍然支持通过此文件夹安装插件。请参阅 Firefox 错误 533891。
- 扩展管理器已由附加组件管理器取代
-
nsIExtensionManager
已被AddonManager 代替。 - 不再使用子 HWND
-
Firefox 在 Windows 上不再为其内部使用创建子 HWND。如果您编写了一个使用本地代码来操作这些 HWND 的扩展,那么您的扩展将无法在 Firefox 4 上运行。您需要停止使用 HWND 或将依赖 HWND 的代码包装在NPAPI 插件中。这是一项很繁重的工作,因此如果您能避免直接使用 HWND,那么您应该这样做。
- 手势更改
-
触控板上三指向上和向下滑动的手势已更改为默认情况下打开和关闭 Firefox Panorama 视图(née TabCandy)。要将其更改回以前滚动到顶部和滚动到底部的命令,请打开 about:config 并将
browser.gesture.swipe.down
设置为cmd_scrollBottom
,并将browser.gesture.swipe.up
设置为cmd_scrollTop
。