最近玩了一把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,也可以使用形如 [email protected](必須有@符號但不必是真實的域名) 的字符串。生成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 擴展中文化實例教程