摩茲動手做系列是 Mozilla Links 中文版的特別企劃,本專題中將會有一系列如何貢獻 Mozilla 與開放網路的心得分享,歡迎大家在閱讀後按部就班,與我們一起動手實作,加入貢獻開放網路的行列!
第二集的分享者為 Browser Pairs(瀏覽器翻牌)遊戲的作者 WM,他將與大家分享如何透過 Add-on SDK 動手撰寫一個簡單的 Firefox 套件。
編按:本文著動在擴充套件本身的程式邏輯,關於可線上擴充套件開發網站 Mozilla Add-on Builder 及用來離線開發擴充套件的 Add-on SDK 使用方法,可先參考 WM 的以下兩篇文章,及本文末的介紹影片:
之前用來解說 Firefox Add-on SDK 的範例 NOWnews Onepage 雖然很有挑戰性,但用到了底層 API 好像有些太複雜了,其實 SDK 作者群也有提供簡單的範例放在 Builder,不過這次我要分享的是 SDK 開發文件在改版前的示範套件,並加上一些修改讓它實用化。
這次打算做一個直接在頁面上顯示字典查詢結果的功能。
首先在 Add-on Bar 上用 Widget 模組顯示圖示按鈕:
var widget = require("widget").Widget({ id: "kimo", label: "奇摩字典", contentURL: data.url("kimo.ico"), panel: panel, onClick: function() { panel.contentURL = "http://tw.dictionary.yahoo.com/"; } });
指定當觸發點擊事件時,在彈出的 Panel 中載入字典首頁,而 Panel 模組的宣告則是:
var panel = require("panel").Panel({ width: 680, height: 550, contentURL: data.url("loading.html"), onHide: function() { panel.contentURL = data.url("loading.html"); } });
當 Panel 隱藏時,把內容改為顯示載入中的頁面,這樣在目前的查詢結果還沒載入完成前,使用者就不會看到上一次的查詢結果。
最後一個用到的模組 Context Menu,就是最重要的文字選取後右鍵查詢選項:
var menuItem = contextMenu.Item({ label: "奇摩字典", image: data.url("kimo.ico"), // Show this item when a selection exists. context: contextMenu.SelectionContext(), // When this item is clicked, post a message back with the selection contentScript: 'self.on("click", function () {' + ' var text = window.getSelection().toString();' + ' self.postMessage(text);' + '});' + 'self.on("context", function () {' + ' var text = window.getSelection().toString();' + ' if (text.length > 20)' + ' text = text.substr(0, 20) + "...";' + ' return "奇摩字典: " + text;' + '});', // When we receive a message, look up the item onMessage: function (item) { panel.contentURL = "http://tw.dictionary.yahoo.com/dictionary?p=" + item; panel.show(); } });
設定 context 為當選取文字時才顯示,並在 contentScript 中描述當有文字被選取時改變選項文字,還有選項點擊後的查詢動作。
就是這麼簡單,這樣就完成了一個實用的擴充套件!
原本還想把字典顯示頁面清理一下,但目前要對 Panel 裡面的外來頁面調樣式還挺費工的,不過可以參考之前的這篇 Yahoo!奇摩字典去廣告稍作處理。
由於是簡單的實作,未來有機會再加上自訂與新增字典種類的功能。
這次的成果原始碼一樣放在 Github,想直接安裝來試試的,也可以在附加元件裡找到:Dictionary Panel。
以下是兩部 Mozilla 針對 Add-on Builder 的簡介影片及 Step-by-step 套件製作教學:
Firefox 的最大特色就是五花八門的套件,讓每個人的 Firefox 功能都很獨特。
如果您也有撰寫套件的經驗,歡迎在留言中與我們分享你的作品!
φ 原文 / WM 撰寫,Irvin 編輯
讚
回覆刪除