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。