• 沒有找到結果。

Firefox 附加元件的檔案結構

Firefox 附加元件現今已多達上萬種,其每一個附加元件的設計皆有迥然不

同的設計風格,這邊以 Backword 說明 Firefox 附加元件的架構。Backword 的架 構如圖 4.2。Backword 整個資料夾中包含有 chrome、components 以及 defaults 上 述三個資料夾與 chrome.manifest[27-30]以及 install.rdf[31-34]這兩個檔案。其細部 目錄架構如下:

圖 4.2 Backword 目錄架構圖



chrome.manifest

程式碼請參見表 4.1,chrome.manifest 檔案記載 Overlay[35-36]、locale[37]

以及 skin[38]等對應位置。例如:overlay chrome://browser/content/browser.xul

chrome://backword/content/backword.xul,當 chrome://browser/content/browser.xul

加載的時候,也一併將 chrome://backword/content/backword.xul 加載進來。

表 4.1 chrome.manifest

# XUL Overlays

content backword chrome/content/

content backword chrome/content/ contentaccessible=yes overlay chrome://browser/content/browser.xul

chrome://backword/content/backword.xul overlay chrome://messenger/content/messenger.xul

chrome://backword/content/backword.xul

overlay chrome://messenger/content/messengercompose/messengercompose.xul chrome://backword/content/backword.xul

# All locales

locale backword en-US chrome/locale/en-US/

locale backword zh-CN chrome/locale/zh-CN/

locale backword zh-TW chrome/locale/zh-TW/

# Skin related overlays

skin backword classic/1.0 chrome/skin/classic/



install.rdf

install.rdf 檔案為 Firefox、Thunderbird 等軟體擴充套件中的安裝描述檔。程

式碼請參見表 4.2。

表 4.2 install.rdf

<!-- 宣告 -->

<?xml version="1.0"?>

<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"

xmlns:em="http://www.mozilla.org/2004/em-rdf#">

<!-- 主要內容 -->

<Description about="urn:mozilla:install-manifest">

<!-- 套件資訊 -->

<em:id>[email protected]</em:id>

<em:name>backword</em:name>

<em:version>2.0.1.4</em:version>

<em:description>Backup every word ever met</em:description>

<em:creator>gneheix</em:creator>

<em:homepageURL>http://backword.gneheix.com</em:homepageURL>

<em:iconURL>chrome://backword/skin/openPage.gif</em:iconURL>

<em:contributor>passerby - Traditional Chinese</em:contributor>

<em:optionsURL>chrome://backword/content/options.xul</em:optionsURL>

<em:extension>true</em:extension>

<em:type>2</em:type>

<!-- 安裝檔案 -->

<em:file>

<Description about="urn:mozilla:extension:file:backword.jar">

<em:package>content/</em:package>

<em:skin>skin/classic/</em:skin>

<em:locale>locale/en-US/</em:locale>

<em:locale>locale/zh-CN/</em:locale>

<em:locale>locale/zh-TW/</em:locale>

</Description>

</em:file>

<!--指名要安裝套件的應用程式 -->

<!--Firefox: {ec8030f7-c20a-464f-9b0e-13a3a9e97384}-->

<!--Mozilla: {86c18b42-e466-45a9-ae7a-9b95ba6f5640}-->

<!--Thundbird: {3550f703-e582-4d05-9a08-453d09bdfdc6} -->

<em:targetApplication>

<Description>

<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>

<em:minVersion>1.5</em:minVersion>

<em:maxVersion>3.5.*</em:maxVersion>

</Description>

</em:targetApplication>

</Description>

</RDF>



defaults

defaults 資料夾中的 setting.js 儲存某些參數。例如:apiurl、apiweburl 的連結

位置等。由於資料隱私考量的關係,表 4.3 只附上部分程式碼。

表 4.3 setting.js

pref("backword.translator", "google.zh-CN");

pref("backword.searchweburl", "http://sh.dict.cn/search/?q=");

pref("backword.apiurl", "http://localhost:3000/backend/xmlrpc");

pref("backword.apiweburl", "http://localhost:3000/");



chrome

chrome 資料夾中有三個資料夾(content、locale 及 skin)以及 backword.jar 壓

縮檔。backword.jar 壓縮檔為安裝附加元件 backword 會使用到的檔案,將 chrome 資料夾(content、locale 及 skin 三個資料夾)中的資料,以 zip 方式壓縮而成的檔 案,其內容與資料夾中的檔案完全相同。



skin

skin 資料夾裡放置所有 backword 會使用到的圖檔。



locale

locale 資料夾中的資料夾(en-US、zh-CN 及 zh-TW)為 Backword 各種語

系,使用者可依造自己的語系來選擇 Backword 所呈現出來的界面。部分程

式碼請參見表 4.4。

表 4.4 backword.dtd

<!ENTITY options.windowtitle "設置">

<!ENTITY options.settingstab "選項">

<!ENTITY options.helptab "幫助">

<!ENTITY options.groupbox.translator "詞典">

<!ENTITY options.translator.google.es "Google - 西班牙語">

<!ENTITY options.translator.google.zh-TW "Google - 繁體中文">

<!ENTITY options.translator.dictcn.tw "Dict.cn - 繁體中文">

<!ENTITY options.translator.showphonetics "顯示音標 (可能導致 Firefox 假死)">

<!ENTITY options.help.link.lable.homepage "首頁:">

<!ENTITY options.help.link.lable.blog "作者 Blog:">

<!ENTITY options.help.link.lable.email "作者 E-mail:">

<!ENTITY options.help.title.searchweb "搜索詳細解釋">

<!ENTITY menu.options.label "選項(O)">

<!ENTITY menu.options.accesskey "O">

<!ENTITY menu.pages.label "網頁(P)">

<!ENTITY menu.pages.accesskey "P">

<!ENTITY menu.dictionary.label "詞典(D)">

<!ENTITY menu.dictionary.accesskey "D">

<!ENTITY menu.usingapi.label "使用後臺(S)">

<!ENTITY menu.usingapi.accesskey "S">

<!ENTITY menu.usinglocalapi.label "使用本地存儲(L)">

<!ENTITY menu.usinglocalapi.accesskey "L">

<!ENTITY menu.showpronunciation.label "使用 Flash 即時發音">

<!ENTITY menu.showpronunciation.accesskey "F">

<!ENTITY menu.quotesentence.label "自動選中當前句子(A)">

<!ENTITY menu.quotesentence.accesskey "A">

<!ENTITY menu.ctrl.label "在 Ctrl 鍵被按下時取詞">

<!ENTITY menu.ctrl.accesskey "C">

<!ENTITY menu.autoback.label "自动收集">

<!ENTITY menu.autoback.accesskey "U">

<!ENTITY menu.enable.label "即時翻譯(E)">

<!ENTITY menu.enable.accesskey "E">



content 資料夾

option.xul 及 option.js 為使用者於十字之處按下滑鼠右鍵後,所彈出的

選項視窗內容。

backword.xul 及 backword.js 則是 Backword 附加元件主要運用到的程式

碼。這邊以區塊方式來做說明。



option(選單)

如表 4.5 Part1 的部分,則是圖 4.3 第 1 區塊的部分,每一個<tab></tab>為一 個 tab(分頁)[39-40],每一個<tabs></tabs>為一整組 tabs 的部分,其 tab 所顯示的 值請參見表 4.5 Part1 的部分,每一個 tab 所對應的值為程式的 label 值,例如:

help-tab 的 label 值為“&options.helptab;”,對應到表 4.4 backword.dtd 第 3 行,

即可得知為 label 值為“幫助”。

圖 4.3 Backword 彈出式選單畫面

如表 4.5 Part2 的部分,則是圖 4.3 第 2 區塊的部分,每一個<menupopup>

</menupopup> 為 一 個 menupopup( 下 拉 式 選 單 )[41] , <menuitem> 為 menuitem[42],下拉式選單中一個子項的部分,其值如同上述方法,例如:

<menuitem>所對應到的 label 值為“&options. translator.dictcn.tw;”,對應到表 4.4

backword.dtd 程式碼第 7 行,即可得知該 label 值為“繁體中文”。另外<checkbox id="showphonetics" label="&options.translator.showphonetics;" />即為表 4.4 第 8 行

之“顯示音標(可能導致 Firefox 假死)”這一個 checkbox。另外,<menuseparator

/>為分隔線[43-44]。

最後,如表 4.5 Part3 的部分,則是圖 4.3 第 3 區塊的部分,藉此可以得知

“&options.help. title.searchweb;”為表 4.4 第 12 行之“搜索詳細解釋”。

表 4.5 options.xul 部分程式

Part 1 :

<tabs id="options-tabs">

<tab id="settings-tab" label="&op.settingstab; I"/>

<tab id="settings2-tab" label="&op.settingstab; II"/>

<tab id="help-tab" label="&op.helptab;"/>

</tabs>

Part 2 :

<groupbox orient="vertical">

<caption label="&op.groupbox.trans;" />

<menupopup>

<menuitem label="&op.trans.googlefr;" value="googlefr" id="googlefr" />

<menuseparator />

<menuitem label="&op.trans.dictcn;" value="dictcn" id="dictcn" />

<menuitem label="&op.trans.dictcntw;" value="dictcntw" id="dictcntw" />

<menuseparator />

<menuitem label="&op.trans.outlook;" value="outlook" id="outlook" />

</menupopup>

<checkbox id="showphonetics" label="&op.trans.showphonetics;" />

</groupbox>

Part 3 : <description value="&op.help.title.searchweb;" class="h3" />



backword tooltip

當使用者在查詢單字時,backword 可以將查詢結果顯示在彈出來的小視窗 中,如圖 4.4,因為考量到未來 backword 會有再延伸擴展的機會,因此這邊介紹 有關於彈出來的視窗(tooltip)[45-46]。

首先先定義一個名為 addWordButton 的 function,並且於 function 裡先設定 好圖檔相關資料,例如:title、src 等。待設定完畢之後,再至 updateLayout function 呼叫 addWordButton function 即可,其程式碼如表 4.6,架構流程圖請參見圖 4.5。

圖 4.4 Tooltip function

圖 4.5 Tooltip 之架構流程圖

表 4.6 Tooltip function

BW_Layout.prototype.addWordButton = function () { var button = BW_createElement("IMG");

button.setAttribute("align", "absmiddle");

button.style.cursor = "pointer";

button.style.backgroundColor = "#FFFACE";

button.setAttribute("title", "Open WebService");

button.setAttribute("src", "chrome://backword/skin/addWord.gif");

this.getDiv().appendChild(button);

};

表 4.7 backword.xul 事件型態

<script>

var backword = new BW_Layout();

addEventListener("load", backword.doLoad, false);

addEventListener("unload", backword.doUnload, false);

addEventListener("mousemove", backword.doMouseMove, false);

addEventListener("mouseout", backword.doMouseOut, false);

addEventListener("mousedown", backword.doMouseDown, false);

addEventListener("mouseup", backword.doMouseUp, false);

addEventListener("scroll", backword.doScroll, false);

addEventListener("blur", backword.doBlur, false);

</script>



backword addEventListener

首先先提到 backword 的 addEventListener(事件型態)[47-49],

addEventListener 用法就是當某個事件(狀況)被觸發了之後就會去呼叫並執

行某個 Function。backword.xul 檔案一共使用到八個事件型態,其程式碼如表

4.7 。 其 型 態 內 容 如 表 4.8 , 例 如 : “ addEventListener("mouseout",

backword.doMouseOut, false); ” , 當 滑 鼠 離 開 元 素 時 , 則 會 去 呼 叫 並 執 行

doMouseOut function 。 此 時 doMouseOut function 執 行 時 則 會 去 呼 叫

doMouseOutImpl function,當 doMouseOutImpl function 執行時會去呼叫 killTimer

function,最後將計時器結束。其程式碼請參見表 4.9,其 addEventListener 之架

構流程圖請參見圖 4.6。

表 4.8 addEventListener 事件型態表

處理程式 何時引發事件

doload

載入完畢

dounload

卸載或網頁離開結束

domousemove

滑鼠移動

domouseout

滑鼠離開元素

domousedown

按下滑鼠鍵時

domouseup

滑鼠鍵放開時

doscroll

滑鼠滾輪捲動頁面時

doblur

元素失去輸入焦點

表 4.9 DoMouseOut function

BW_Layout.prototype.doMouseOut = function (e) { backword.doMouseOutImpl(e);

};

BW_Layout.prototype.doMouseOutImpl = function (e) { this.killTimer();

};



Backword 查詢單字解釋功能

Backword 查詢單字解釋功能是發送請求至 Google 翻譯工具,待 Google 回

傳解釋結果後,Backword 會彈出一個小視窗,並顯示查詢解釋結果。程式碼請 詳見表 4.10。如圖 4.7,使用者使用 backword 查詢結果與 Google 回應解釋結果 兩者是一樣的。其架構流程圖請參見圖 4.8。

圖 4.7 Backword 查詢結果

表 4.10 Backword 查詢單字解釋功能

var tolang = this._tolang;

var host = "www.google.com";

var lang = "en|" + tolang;

var url = BW_DictionaryUrl(host, text, lang, tolang);

var request = new XMLHttpRequest();

request.open("GET", url, false);

request.send(null);

if (request.status == 200) { if (/^zh/.test(tolang)) {

response = request.responseText.replace(/ /g, "");

} else {

response = request.responseText;

} }

function BW_ComposeUrl(prefix, host, restrict, searchStringTerms) { var parts = [];

parts.push("http://");

parts.push(prefix);

parts.push(host.substr(3));

parts.push("/");

parts.push(restrict);

parts.push("?");

parts.push(searchStringTerms.join("&"));

return parts.join("");

}

function BW_DictionaryUrl(host, text, lang, hl) { var queryParts = [];

queryParts.push("sourceid=navclient-ff");

queryParts.push("ie=UTF-8");

queryParts.push("oe=UTF-8");

queryParts.push("text=" + text);

queryParts.push("langpair=" + lang);

queryParts.push("hl=" + hl);

queryParts.push("sig=8" + GPR_awesomeHash(text));

return BW_ComposeUrl("www", host, "tbproxy/dictionary", queryParts);

}

圖 4.8 查詢單字解釋之架構流程圖

第 第 第

第5章 章 章 實驗結果 章 實驗結果 實驗結果 實驗結果

本章所要介紹的為本論文所提出的方法,本章節將介紹本方法的架構、功 能、流程與展示。

5.1 系統架構 系統架構 系統架構 系統架構

以 Backword 為基礎來發展本系統,其架構如圖 5.1。Backword 整個資料夾 中包含有 chrome、components 以及 defaults 上述三個資料夾與 chrome.manifest 以及 install.rdf 這兩個檔案。其細部架構同 4.3.1 系統架構,這邊就不重覆介紹。

圖 5.1 Backword 目錄架構圖

相關文件