更新 Firefox 4 的擴充套件
本文件詳細介紹了 Firefox 4 中可能影響現有擴充套件的更改。
使用者介面更改
狀態列
Firefox 4 已移除狀態列,取而代之的是新的附加元件欄。有關詳細資訊,請參閱 附加元件欄。
工具欄
建立工具欄
如果您的附加元件使用覆蓋(overlay)建立新工具欄,則該工具欄可能不會顯示。當您的 <toolbox> 元素覆蓋是 <window> 元素的子項而不是覆蓋元素的直接子項時,就會發生這種情況。將工具箱移出視窗元素即可解決此問題。
Firefox 應用程式選單
在 Windows 上,選單欄現在預設隱藏。取而代之的是一個開啟簡化 Firefox 應用程式選單的按鈕。此選單包含最常用的選單功能,使應用程式更易於使用。仍然可以透過按 Alt 鍵訪問選單欄。
如果您的附加元件只能透過選單欄訪問,您也需要覆蓋應用程式選單。擴充套件選單項沒有特定位置,因此您應該檢視選單併為您的特定擴充套件選擇合適的位置。
標籤頁
為了支援應用標籤頁(app tabs)和全景(Panoramas)以及使標籤欄成為標準工具欄,對 <tabbrowser> 元素進行了一系列更改。其他可能破壞現有擴充套件的更改包括:
XPCOM 更改
對包含 XPCOM 元件的附加元件和應用程式進行了一些更改。有關詳細資訊,請參閱 Gecko 2 中的 XPCOM 更改。
附加元件管理器
經過大修的附加元件管理器現在作為標籤頁實現,而不是在單獨的視窗中。從使用者體驗角度影響您瀏覽器的一些更改是,您的附加元件圖示現在可以是 64x64 畫素,而不是 32x32。雖然 32x32 畫素的圖示仍然可以使用,但顯然,如果您的附加元件提供 64x64 畫素的圖示,看起來會更好。幸運的是,64x64 圖示向後相容且縮放效果好,因此您可以直接切換,而無需同時使用兩種尺寸。
此外,附加元件管理器的後端也進行了重新設計。nsIExtensionManager 介面已消失,它使用的舊的基於 RDF 的儲存也已消失。附加元件元資料現在儲存在 SQLite 資料庫中,附加元件管理器現在是一個名為 AddonManager 的 JavaScript 程式碼模組。
新 API 的一個關鍵區別是,請求附加元件元資料現在是非同步的,而不是同步的;這同樣適用於使用 FUEL 的附加元件,因此所有請求附加元件元資料的附加元件都需要更新。
執行緒
您現在不能線上程之間傳遞 JavaScript 物件。這使得執行緒管理器對附加元件開發人員來說幾乎無用,而且目前沒有太多替代方案。未來,ChromeWorker 可能會得到改進以填補這一空白。
網路重定向
處理網路重定向的 API 已更改為非同步;在“net-channel-event-sinks”類別中註冊的任何附加元件都需要更新以使用新的 asyncOnChannelRedirect API。
XPI 解包
Firefox 4 不再解壓 XPI 檔案進行安裝。它只將 XPI 檔案放置在使用者配置檔案中,然後直接從 XPI 讀取 chrome 檔案和其他檔案。XPI 中的 jar 包仍然可以使用,但不再是必需的,這可以使您的開發或構建更輕鬆。這樣做主要是為了在慢速作業系統上的效能考慮,並且允許更好的快取失效,這對開發人員也有幫助。但是,並非所有型別的檔案都可以從 XPI 中讀取,因此如果您的擴充套件使用了其中一種檔案,則需要在 install.rdf 中指定 <em:unpack>,以便 Firefox 仍然解壓您的 XPI 並使用單個檔案,否則您的擴充套件在嘗試訪問這些檔案時將失敗。
如果您的擴充套件只包含這些型別的檔案,則無需進行任何更改
install.rdfchrome.manifestchrome(包括content、locale、skin)- 預設首選項
- 用 JavaScript 編寫的 XPCOM 元件
如果您的擴充套件包含以下任何內容,則需要將 <em:unpack> 新增到 install.rdf 中
- 二進位制 XPCOM 元件
- 使用 ctypes 載入的共享庫
searchplugins/(應由 Firefox 自動載入)dictionaries/- 視窗圖示(可能已 修復)
如果您的擴充套件程式碼訪問您已打包在 XPI 中的其他檔案,您需要將 <em:unpack> 新增到 install.rdf 中,或者您可以透過對程式碼進行一些更改來支援打包安裝。任何使用 getInstallLocation() 和 nsIFile 的程式碼都需要 em:unpack 或需要更改。您可以使用 Addon.getResourceURI() 方法,它將返回一個指向請求檔案的 nsIURI。如果擴充套件已解包,則它將是一個 file:// URI。如果擴充套件已打包,則它將是一個 jar:// URI。您可以透過使用 nsIIOService 開啟通道來開啟這些 URI 的流,這樣您就可以載入檔案內容而無需解包。
已移除子 HWND
這隻會影響極少數開發人員。在以前版本的 Firefox 中,Windows 會為內部使用建立子 HWND。作為改進圖形效能工作的一部分,這些已不再建立。
不幸的是,一些擴充套件訪問了這些 HWND 並直接操作它們;這些擴充套件在 Firefox 4 中將不再起作用。我們已採取了一些變通方法來幫助某些指向裝置驅動程式和輔助技術軟體(例如螢幕閱讀器)。但是,我們決定不再新增更多變通方法來支援擴充套件,而這些擴充套件從一開始就不應該這樣做。
如果您維護一個使用依賴於已不存在的 HWND 的本機元件的擴充套件,您需要更新您的擴充套件。有兩種方法可以做到這一點。
第一種也是更好的一種解決方案是停止訪問 HWND,而是使用 Web 功能或 XUL 來實現您的擴充套件。Firefox 4 中有許多新功能,可以實現許多以前需要本機程式碼才能完成的任務,因此您可能不再需要這樣做。
如果您發現此方法不起作用,並且仍需要直接訪問 HWND,您可能會發現唯一的解決方案是編寫一個 NPAPI 外掛來完成工作。這可能需要大量工作,但應該有效。當然,如果您使用的特定 HWND 不再存在,這可能也無濟於事。
開發和測試技巧
快取
由於 Firefox 現在更積極地快取程式碼和其他資源,因此您需要在啟動 Firefox 4 時清除快取。否則,您可能會測試過時的附加元件部分。要做到這一點,請使用 -purgecaches 命令列選項執行 Firefox。
配置檔案管理器
舊的配置檔案管理器工具將在 Firefox 4 中被移除,儘管目前尚未移除。此工具長期以來未更新,並且缺少功能。此外,它的存在正在減慢應用程式啟動速度。
配置檔案管理器的替代品 可用。(另請參閱 Firefox bug 539524)。此新工具獨立於瀏覽器本身,並且比舊的配置檔案管理器更健壯。
全域性安裝擴充套件
已移除 -install-global-extension 和 -install-global-theme 命令列選項。全域性安裝的處理一直很複雜,並且正在就未來如何解決這個問題進行討論。在此期間,請參閱 安裝擴充套件 以獲取有關自動安裝附加元件的資訊。
另見
- 使您的附加元件與 Firefox 4 相容(部落格文章)