最近玩了一把Firefox的擴充開發,感覺不錯。倒騰出來一個ChinaStock,有興趣的可以瞧瞧(現在還被放在Sandbox裡面,必須登入才能下載安裝;同時因為被放在sandbox裡面,暫時還不能被自動更新版本)。如果您願意的話,也可以直接在本站下載安裝。
擴充開發中用得著的擴充(有點拗口):
Extension Developer's Extension (xpi download / install address) 快速將擴充目錄打包成xpi檔案,在不重啟Firefox的情況下重新載入所有擴充以及其他實用小功能。必備!如果不使用該擴充快速重載擴充的話,每次修 改代碼之後都必須從Firefox的功能表列選擇“退出”關閉Firefox再開啟才有99%的幾率保證該Chrome內容是最新修改後的,那叫一個痛苦。 即使設定參數 nglayout.debug.disable_xul_cache = true ,也只是減少了修改視窗或對話方塊之後的重啟而已。
Chrome List + Extension Manager Extended 學習其他人寫的擴充總是最快入門的方法。 Chrome List 提供了擴充瀏覽功能,可以查看擴充安裝之後存在的問題和jar包裡面的原始碼;Extension Manager Extended 則擴充了Firefox的擴充軟體列表功能,直接顯示每個擴充的ID,通過右鍵可以直接開啟擴充存放的目錄,再不需要去資源管理員找深埋在 Application Data\Mozilla\Firefox\Profiles\!@#$%^.default\extensions 裡的jar包,也不需要去猜測使用UUID作為ID的擴充到底對應在哪個子目錄了。
DebugLogger + Console2 DebugLogger 是 dump() 的最佳化版本。可以按照每個項目分別查看各自的dump資訊。像 Firebug 這樣的大師級擴充屬於開發必備不需多講,這個 DebugLogger 相較而言屬於輕量級並且原始的調試協助工具輔助。配合它,至少不需要再用alert來簡單粗暴了。 Console2 則是錯誤控制台的加強版,實現了 Firefox 3 錯誤控制台的一些特性。
現有HTML代碼的利用:
雖然並不被鼓勵,但對於更熟悉HTML文法的開發人員來說, 最快捷編寫擴充介面的方法是在 XUL 中引入 HTML 命名空間(為根標籤增加屬性 xmlns:html="http://www.w3.org/1999/xhtml"), 然後給所有使用到的HTML標籤添加 html: 首碼(比如 <div>...</div> 應該寫成 <html:div>...</html:div>)即可。當然,因為 XUL 是基於 XML 的語言,所以所有的標籤屬性都應該是小寫格式,並且空tag必須進行關閉。
相應的,由於上述定義方式下HTML 元素標籤定義不在主命名空間內,當進行 DOM 操作的 js 代碼在建立 HTML 元素的時候,也不能直接使用 createElement ,而必須使用 createElementNS 。比如 document.createElementNS("http://www.w3.org/1999/xhtml","html:div");
關於擴充ID:
每個擴充軟體都必須有個唯一的標識ID,建議是使用UUID,也可以使用形如 extensionname@my.domain(必須有@符號但不必是真實的網域名稱) 的字串。產生UUID的方法很多:windows下可以安裝微軟自己提供的GUID Generator,*nix 下直接敲命令 uuidgen ,或者訪問這裡線上產生一個。個人覺得雖然UUID不會造成ID衝突,但 @ 形式的可讀性更強一些,否則不靠前面提到的擴充幫忙要把ID跟功能對應起來還真是件費力的事情。
擴充描述的本地化:
在 Firefox 擴充管理器中,每個擴充的名字下面都有一段簡短的描述(description),這段描述來自擴充根目錄下的 install.rdf 檔案。將這段描述進行本地化處理的方法是在擴充目錄下建立子目錄 defaults/preferences ,在子目錄下建立一個 js 檔案 myextname.js ,包含以下內容:
pref("extensions.ReplaceWithExtensionIDHere.description", "chrome://myextname/locale/myextname.properties");
同時在 locale 語言套件檔案 myextname.properties 中添加一行:
extensions.ReplaceWithExtensionIDHere.description = 經過本地化的描述內容
擴充的打包發布:
如果使用 Extension Developer's Extension 提供的extension builder 進行打包,它會在build的過程中自動將chrome.manifest中的目錄配置替換成jar:chrome的形式,而不需要自己來回切換不同的chrome.manifest配置。當然前提是你的擴充工作目錄按照約定的結構進行組織。如果你沒有把content / skin / locale 目錄放在工作根目錄而是放在了 chrome 子目錄下的話,打包之後xpi檔案會同時包含jar檔案和chrome整個目錄。產生xpi檔案之後,到 Firefox Add-ons 的開發人員工具介面進行註冊/登入/上傳即可。
如果代碼實際是相容Firefox的最新版本的,只是因為在install.rdf裡面的em:maxVersion設定了過老的版本號碼而導致你發布在AMO上的擴充被認為不相容而無法下載的話,可以登入AMO後進入開發人員工具管理介面,選擇相應的擴充,點擊版本曆史列出的版本號碼連結進去,就可以快速修改該版本xpi的相容版本範圍(找這個修改的地方找了N久,OrZ)。
參考文檔:
- 在決定開始開發Firefox擴充之前,先看看如何 Setting up extension development environment 絕對是磨刀不誤砍柴工的
- 按照 Getting started with extension development 的步驟,很快可以寫出自己的第一個擴充。當然,這也只是程式員都知道的 Hello world 而已
- 也可以看看中文版本的 使用 XUL 實現瀏覽器延伸 1 , 2 ,如果對XUL本身還有疑惑,應該看看該文最後的參考連結
- 要進行完整的語言本地化處理,可以參考Firefox 擴充中文化執行個體教程