Firefox 4 开发者发行说明
Firefox 4 于 2011 年 3 月 22 日发布,它增强了性能,增加了对 HTML5 和其他不断发展的 Web 技术的支持,并进一步提高了安全性。本文提供了有关此版本的信息,以及 Web 开发者、附加组件开发者和 Gecko 平台开发者可用的功能。
面向 Web 开发者的功能
Gecko 现在使用 HTML5 解析器,这修复了错误,提高了互操作性,并提高了性能。它还允许内容直接在 HTML 标记中嵌入 SVG 和 MathML。
HTML
- Web 表单
-
Web 表单的改进。这些更改包括在
<input>元素中添加了输入类型、数据验证等。 - HTML5 区块
-
Gecko 现在支持与文档中的区块相关的新 HTML5 元素:
<article>、<section>、<nav>、<aside>、<hgroup>、<header>和<footer>。 -
此属性适用于所有元素,用于隐藏网页中当前与用户无关的内容。
- 其他 HTML5 元素
-
Gecko 现在还支持以下新的 HTML5 元素:
<mark>、<figure>和<figcaption>。 - WebSocket
-
使用新的 WebSockets API 实现 Web 应用程序和服务器之间的实时通信指南。请注意,Firefox 4 中实现的 WebSockets 与最终标准不兼容,通常不应使用。
Canvas 改进
对 CanvasRenderingContext2D 接口进行了以下更改,以使我们的 <canvas> 实现更符合规范:
- 在调用
arc()时指定负半径现在会正确抛出INDEX_SIZE_ERR异常。 - 在调用
createLinearGradient()和createRadialGradient()时指定非有限值现在会抛出NOT_SUPPORTED_ERR而不是SYNTAX_ERR。 - 将
miterLimit设置为负值不再抛出异常;相反,它会正确忽略非正值。 - 将
lineWidth设置为负值不再抛出异常;相反,它会正确忽略非正值。 putImageData()方法现在支持可选参数dirtyX、dirtyY、dirtyWidth和dirtyHeight。
杂项 HTML 更改
<textarea>元素现在默认可调整大小;您可以使用resizeCSS 属性禁用此功能。canvas.getContext和canvas.toDataURL在使用无法识别的参数调用时不再抛出异常。<canvas>元素现在支持 Mozilla 特有的mozGetAsFile()方法,该方法允许您获取包含 canvas 内容图像的内存文件。有关详细信息,请参阅HTMLCanvasElement。Canvas2DContext.lineCap和Canvas2DContext.lineJoin在设置为无法识别的值时不再抛出异常。Canvas2DContext.globalCompositeOperation在设置为无法识别的值时不再抛出异常,并且不再支持非标准darker值。- 对所有其他浏览器中不存在的已废弃
<spacer>元素的支持已移除。 <isindex>元素在通过调用Document.createElement()创建时,现在被创建为一个不带任何属性或方法的简单元素。- Gecko 现在支持对
<input>元素调用click()以打开文件选择器。请参阅文章 使用 Web 应用程序中的文件 中的示例。 <input>元素支持新的mozactionhint属性,该属性允许您指定虚拟键盘上回车键的标签。<iframe>、<noembed>和<noframes>元素内部的<script>元素现在会执行,而以前的 Firefox 版本中不会。这符合规范,并与其他浏览器的行为一致。
CSS
- CSS 过渡
-
Firefox 4 中提供了新的 CSS 过渡支持。
- CSS 中的计算值
-
已添加对
-moz-calc的支持。这允许您将<length>值指定为数学表达式。 - 选择器分组
-
支持
:-moz-any以分组选择器并分解组合器。 - 背景图像子矩形支持
-
-moz-image-rect()函数使得可以使用图像的子矩形作为background-image。 - CSS 触摸属性
-
添加了对触摸属性的支持。详细信息和真实文章名称稍后提供。
- 使用任意元素作为 CSS 背景
-
您可以使用
-moz-elementCSS 函数和document.mozSetImageElement()DOM 函数将任意 HTML 元素用作背景。 - 隐私与 :visited 选择器
-
已更改使用 CSS 选择器可以获取的有关已访问链接样式的信息。这可能会影响某些 Web 应用程序。
新的 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 函数
| Function | 描述 |
:-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 标准。
- 支持 WebM 视频
-
Gecko 2.0 支持新的开放 WebM 视频格式。
- 使用 SMIL 的 SVG 动画
-
现在支持 SVG 的 SMIL 动画。
- 将 SVG 用作图像和 CSS 背景
-
您现在可以将 SVG 与
<img>元素一起使用,也可以作为 CSSbackground-image使用。 - 媒体
buffered属性支持 -
现在支持
<video>和<audio>元素上的buffered属性,允许您确定媒体文件已缓冲的范围。TimeRangesDOM 接口已实现以支持此功能。 - 媒体
preload属性 -
已实现 HTML5 规范中的
preload属性,取代了先前实现的(且不再支持的)autobuffer属性。这会影响<video>和<audio>元素,以及nsIDOMHTMLMediaElement接口。 - SVG 文本定位改进
-
您现在可以为 SVG
<text>和<tspan>元素上的x、y、dx和dy属性值指定列表。这允许您单独控制字符串中每个字符的定位。
DOM
- JavaScript 类型化数组
-
已添加对 JavaScript 类型化数组的支持;这允许您使用本机数据类型操作包含原始数据的缓冲区。一些 API 使用此功能,包括 文件 API、WebGL 和 WebSockets。
- 获取范围的边界矩形
-
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 更改
<textarea>元素的换行现在可以通过 DOM 的wrapDOM 属性进行控制。Firefox 错误 41464- 使用
Document.createElement()创建并插入到文档中的<script>元素现在默认情况下按照 HTML5 规范执行。带有src属性的脚本会尽快执行(不保持顺序),不带src属性的脚本会同步执行。要使带有src属性的脚本插入脚本按照插入顺序执行,请将它们的.async=false设置为false。 - DOM
File对象现在提供了一个url属性。 FormData支持XMLHttpRequest。- 已实现
HTMLElement.isContentEditable属性。 Document.currentScript属性允许您确定当前正在执行的<script>元素的脚本。新的beforescriptexecute和afterscriptexecute事件在脚本元素执行之前和之后触发。- 已将
mozSourceNode属性添加到DataTransfer对象。 - 已将
Selection.modify()方法添加到Selection对象;这允许您轻松更改浏览器窗口中当前的文本选择或光标位置。 - 已移除对
window.directories对象和window.open的directories功能的支持,这些在任何其他浏览器中都不受支持。请改用personalbar。Firefox 错误 474058 - 已将
MouseEvent.mozInputSource属性添加到 DOM 用户界面事件中;此非标准属性允许您确定生成事件的设备类型。 - 已实现
Documentreadystatechange事件。 - 在怪异模式下,
Document.createElement()方法不再接受标签名称周围的<和>。 - 已添加
Element.setCapture()和Navigator.appVersion和Navigator.userAgent中移除。请改用Navigator.language或Accept-Language标头。Firefox 错误 572656 XMLHttpRequest对象现在通过 Gecko 特定的mozResponseArrayBuffer属性将响应公开为 JavaScript 类型化数组和字符串。- 鼠标事件 现在包含一个
mozPressure属性,指示支持压力敏感输入设备的压力大小。 URL.createObjectURL()和URL.revokeObjectURL()方法允许您创建引用本地文件的对象 URL。DOMImplementation.createHTMLDocument()方法允许您创建新的 HTML 文档。- 如果指定的选择器字符串无效,
Node.mozMatchesSelector()现在会抛出SYNTAX_ERR异常,而不是错误地返回false。 - 您现在可以使用与 CSS 相同的简写语法设置元素的 SVG 属性值。例如:
element.style.fill = 'lime'。有关详细信息,请参阅style。 - 文档根现在具有一个
privatebrowsingmode属性,描述隐私浏览模式的状态,包括指示隐私浏览是临时还是永久。 window.getComputedStyle()方法的第二个参数现在是可选的,与所有其他主要浏览器一样。- DOM
StorageEvent对象现在与最新版本的规范匹配。 setTimeout()和setTimeout()方法允许的最小延迟现在是一个首选项dom.min_timeout_value。- 由于潜在的安全问题,
MozAfterPaint事件默认不再发送。可以通过设置首选项重新启用它。
安全
- 内容安全策略(CSP)
-
内容安全策略(CSP)是 Mozilla 提出的一项建议,旨在帮助 Web 设计师和服务器管理员指定其网站内容的交互方式。目标是帮助检测和缓解包括跨站脚本和数据注入攻击在内的攻击。
- HTTP 严格传输安全
-
HTTP 严格传输安全是一项安全功能,它允许网站告知浏览器只能使用 HTTPS 与其通信,而不是使用 HTTP。
- X-FRAME-OPTIONS 响应头
-
Firefox 现在支持 Internet Explorer 8 中引入的 X-FRAME-OPTIONS HTTP 响应头。这允许网站指示其页面是否可以在框架中使用,如果可以,是否将其限制为同一来源。
- 用户代理字符串 更改
-
为了减少 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代码模块提供 getter,可以轻松获取对常用服务的引用,例如首选项服务或窗口协调器等。 - JS-ctypes API
-
JS-ctypes API 使得无需使用 XPCOM 即可调用 C 兼容的外部库函数。
- 附加组件管理器
-
新的附加组件管理器提供有关已安装附加组件的信息、管理它们的支持,并提供安装和删除附加组件的方法。
- PopupNotifications.jsm
-
新的弹出通知模块使得向用户呈现美观的非模态通知变得容易。您可以在 使用弹出通知 中了解如何使用此 API。
- 从 chrome: URLs 加载代码模块
-
您现在可以使用 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 代码模块中使用 workers。
DOM 更改
ChromeWorker-
一种用于特权代码的新型 worker;这允许您在扩展和应用程序代码中的 workers 中使用 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方法,该方法允许您获取选项卡的 favicon,而无需拉出<xul:browser>元素。 - 添加了新的
tabbrowser.tabs属性,该属性允许您轻松获取<xul:tabbrowser>元素中的选项卡列表。 - 新的
pinTab和unpinTab方法允许您固定和取消固定选项卡(即,在应用程序选项卡和常规选项卡之间切换它们)。 - 已将
getTabModalPromptBox方法和tabModalPromptShowing属性添加到<xul:tabbrowser>以支持选项卡模态警报。
弹出窗口的更改
- 不再支持
<xul:popup>元素;您应该改用<xul:menupopup>。(如果您继续使用popup,您将遇到故障,因为该元素不再具有特殊含义。例如,当在<xul:popup>中使用时,<xul:menuseparator>可能会显示透明。) <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属性,允许您指定 resizer 是用于窗口而不是元素,以防止窗口 resizer 被绘制两次。"active"属性不再在活动 XUL 窗口上设置。相反,您可以使用新的:-moz-window-inactive伪类为背景窗口分配不同的样式。emptytext属性现已废弃;您应该改用placeholder。<xul:window>元素现在提供一个accelerated属性;当为 true 时,允许硬件层管理器加速窗口。<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事件,允许您检测选项卡何时被固定和取消固定。 - 当选项卡的
label、crop、busy、image或selected属性更改时,会发送新的TabAttrModified事件。 <xul:tab>元素现在具有pinned属性,允许您确定选项卡当前是否已固定。<xul:tree>元素上的setDirectionIndicator类已有一段时间没有执行任何操作;现在它完全不再使用。<xul:window>元素现在具有chromemargin属性,允许您设置窗口两侧 chrome 和内容之间的边距;例如,您可以使用它在标题栏中绘制。<xul:window>元素现在具有disablechrome属性;当窗口用于显示浏览器内 UI(例如about:addons)时,它用于隐藏窗口的大部分 chrome。<xul:window>元素现在具有disablefastfind属性,该属性允许您在内容不支持快速查找时禁用窗口中的查找栏。例如,附加组件面板使用此功能。- 工具栏现在可以独立于工具箱,但仍被视为
<xul:toolbox>的成员,通过设置<xul:toolbar>的toolboxid属性。此外,<xul:toolbox>元素现在具有externalToolbars属性,该属性列出所有被视为工具箱成员的工具栏。 - 已添加对出于调试目的记录 XUL 模板的支持。
影响开发者的 UI 更改
- 附加组件栏
-
状态栏已移除,取而代之的是新的附加组件栏。如果您过去一直将 UI 添加到状态栏,则需要更新您的扩展以使用此功能。
- 隐藏浏览器 Chrome
-
现在可以根据需要隐藏浏览器的 Chrome;例如,
about:addons就是这样做的。
Storage
杂项存储 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 更改
-
有关影响 Firefox 4 兼容性的 XPCOM 更改的详细信息。
- Components.utils.getGlobalForObject()
-
此新方法返回与对象关联的全局对象;这取代了现在已移除的
__parent__的常见用例。
地点
- 地点查询结果现在可以被多个观察者观察,并且查询可以异步执行。这意味着
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。 - Gecko 1.9.2.4 中添加了
nsIINIParserWriter接口,以支持写入 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 全景视图(以前称为 TabCandy)。要将其更改回之前的滚动到顶部和滚动到底部命令,请打开 about:config 并将
browser.gesture.swipe.down设置为cmd_scrollBottom,将browser.gesture.swipe.up设置为cmd_scrollTop。