2009年6月26日 星期五

Firefox extension開發心得

開發時的錯誤輸出...
有三種...

(1)使用ConsoleService
https://developer.mozilla.org/en/Console_service
這種會把錯誤訊息顯示在"工具->錯誤主控台"裡面

(2)Components.utils.reportError
https://developer.mozilla.org/en/Components.utils.reportError
這種也會顯示在錯誤主控台,但是好像主要是在try-catch的時候顯示exception物件用的

(3)window.dump
https://developer.mozilla.org/en/DOM/window.dump
顯示在終端機,似乎必須要在終端機下面執行的才會顯示
windows下就是要開個dos視窗來執行才會看到

source code trace心得...
xpcom.js
在global宣告了XPCOM
Utils
以及其基本的method跟attribute(跟XPCOM服務相關的)

chrome.js
在global宣告了FirebugChrome,因該是整個Firebug的core
另外還有一些全域的helper function

lib.js
讓FBL=XPCOMUtils
然後開始替FBL加入其他的member
大部份比較像是跟FBL內部的helper,擷取註解標示出來的區塊:
// Basics
// Localization
// Visibility
// Window iteration
// CSS classes
// DOM queries
// DOM Modification
// XPath
// Clipboard
// Graphics
// CSS
// XML Serialization
// String escaping
// Menus
// Stack Traces
// Event Monitoring
// Functions
// Source Files
// Firefox browsing
// JavaScript Parsing
// Events
// DOM Events
// URLs
// Network
// Network Tracing
// Programs
...中間有幾塊沒說明...
// DOM Constants
// Debug Logging
// Time Utils
這邊的method有些是用'函式資料'有些是用'函式實字'
差別在那呢? 或許跟closure有關?要在看看...
FBL有一個叫作namespace的陣列
後面的.js大多是用一個未命名的函式當作名稱空間
然後用FBL.ns() push到FBL.namespace裡面...
有趣的是每丟一個真正有用的namespace進去,會多丟一個空的{}區塊進去
好像是要避免全部namespace緊緊的靠在一起可能會有什麼問題...

後面的js都在global下面增加一些物件
但是好像是包在一個namespace下面,所以不會撞在一起?
到底是什麼不會撞在一起?
是namespace下面,物件之外的常數跟function?
還是物件下面的member?(物件下面的東西本來就不會撞在一起啊?)

FirebugChrome.$()會去call FBL.$()
$()是用來getElementById的

domplate.js
宣告了好幾個物件
另外也對FBL跟global加了幾個function