Mac 下開發 Firefox Addon 筆記 |
2008/06/20 ~ 阿亮 ~ |
主要參考這篇來進行: Building an Extension-MDC
◎ Firefox/Thunderbird Extension Wizard : 先產生一份 extension framework (helloworld.zip)。 解開之後,build.sh 要改下面這些東西
1.
mkdir --parents --verbose $TMP_DIR/chrome
改成
mkdir -p -v $TMP_DIR/chrome
2.
cp --verbose --parents $FILES $TMP_DIR
改成
cp -v -p $FILES $TMP_DIR
3.
cp --verbose $ROOT_FILE $TMP_DIR
改成
cp -v $ROOT_FILE $TMP_DIR
4. 也可能會有下述的錯誤訊息
sed: 1: "s/^(content\s+\S*\s+)(\ ...": \1 not defined in the RE sed: 1: "s/^(skin|locale)(\s+\S* ...": \1 not defined in the RE
這是 sed 處理內,\\1 似乎 backslash 處理不好,
sed -i -r s/^\(content\\s+\\S*\\s+\)\(\\S*\\/\)$/\\1jar:chrome\\/$APP_NAME\\.jar!\\/\\2/ chrome.manifest sed -i -r s/^\(skin\|locale\)\(\\s+\\S*\\s+\\S*\\s+\)\(.*\\/\)$/\\1\\2jar:chrome\\/$APP_NAME\\.jar!\\/\\3/ chrome.manifest
一直調不好,只好這兩行改用 perl 處理 !!充血!!
perl -i -pe 's/^(content\s+\S*\s+)(\S*\/)(\s+\S*\s*)$/\1jar:chrome\/'$APP_NAME'\.jar!\/\2\3/' chrome.manifest perl -i -pe 's/^(skin|locale)(\s+\S*\s+\S*\s+)(.*\/)$/\1\2jar:chrome\/'$APP_NAME'\.jar!\/\3/' chrome.manifest
◎ 在測試 (Test) 的情形下,不用每次都重新建立 helloworld.xpi,安裝再重開 Firefox.
- 在 ~/Library/Apllication Suppor/Firefox/Profiles/ 目錄,會有類似 <xxxyxxy>.default 的目錄,其中 <xxxyxxy> 名稱每次新增都會不一樣。
- 在該目錄下的 extensions 目錄新增一個檔案,該檔名為 extension 的 ID,可在 install.rdf 內的 <em:id> 內找到,比如 helloworld@derjohng.sun
- 比如
~/Library/Apllication Suppor/Firefox/Profiles/xxxyxxy.default/extensions/helloworld@derjohng.sun
- 該檔案內填入,你在開發的 extension 的目錄位置。
- 這樣改完程式,重開 Firefox 即可。
- 原本 Extension Developer Addon 有「Reload Chrome」可以不用重開 Firefox,但我每試必當掉,所以,只好改用另一個 QuickRestart Addon 來重開了。
◎ 在 GreaseMonkey 開發的 Script 可以藉由 User Script Compiler 轉換成 Firefox Addon。
◎ 在 Firefox2 下寫好的 Addon,轉到 Firefox3 下執行,Error Console 可能會有下列的訊息,
Security Error: Content at ********** may not load or link to chrome://helloworld/skin/hellow.png
只要在 chrome.mainifest 原來的
content helloworld content/
加上 contentaccessible=yes 即可
content helloworld content/ contentaccessible=yes
◎ 這裡有關於開發 Addon 的簡體中文版 。
◎ XULRunner 是個蠻好玩的東西
可以用做 Firefox Addon 的相同架構,用 XUL 和 Javascript 就可以做成應用程式,比如 Chatzilla on XULRunner 。就是和 Adobe AIR 相同概念的東西。
◎ Addon 開發,如何有新的版本,如何發布更新機制,有二種方法:
一種是放在 https 的 secure web server 下,這又分兩種
- 一是放到 Mozilla 下,但一開始放在實驗並不提供下載,等到有人「查核」,才會開放。
- 一是自己要有 https 伺服器,這種在 webhosting 很貴,而自己架 self-CA 的話,在 Firefox3之後,這種是不准許的
另一種就是 http 但要加 hashKey 的方式,流程整理如下:
- 安裝 McCoy 軟體
- 新增一個 Key
- 在 Addon 包裝成 xpi 前,用McCoy 的「Install」選單將公開 Key 放到 Install.rdf.
- 包裝成 xpi
- 準備好 update.rdf 的描述檔,內容要指定到上述包裝好的 xpi,並放在一起
- 其中用 openssl 產生該 xpi 檔案的 hash 值,將該值填到 update.rdf 內
openssl sha1 <your xpi file>
蠻有趣的機制