2016年9月16日

摩茲動手做(五)自己的瀏覽器自己改─使用新版 Firefox Addon SDK 開發簡單的附加元件

本文原文出自《小克'S 部落格》,作者小克更新謀智台客〈自己的瀏覽器自己改 (Part I) -利用Firefox Addon SDK開發簡單的附加元件〉一文,以新的 jpm 工具相關資訊,取代原文中使用的舊版 cfx 工具而成。

也歡迎參閱由 WM 撰寫的〈摩茲動手做(二)用 Add-on SDK 寫簡單的 Firefox 套件〉 一文。如果有開發相關疑問,歡迎加入 MozTW dev/add-on 開發 Telegram 聊天頻道,一起討論套件開發的心得與問題。

前言

Firefox 最受歡迎的特色之一,就是量多而且質精的附加元件 (Add-on)。在 Firefox 附加元件網站中,您可以找到各式各樣的附加元件,滿足您上網的各種需求。在這篇文章中,我們將會介紹如何利用 Firefox Add-on SDK 撰寫簡單的附加元件,改變網頁的外觀與行為。

即使不是自己架設的網站,我們也能隨心所欲的改善它們的使用經驗!

準備工作

為了減輕開發者的負擔,Mozilla 推出 Add-on SDK,取代原來基於 XUL 技術的附加元件框架。相較於傳統的 XUL,Add-on SDK 提供更多簡單易用的 API,簡化開發流程,另外也提供了許多新的使用者介面元素,來配合新版的 Firefox 介面。

為了能夠使用最新的 API,建議您先更新 Firefox 到最新版

您還需要安裝最新版的 Add-on SDK,以下將以 Linux 平台作為教學範例 ( OS X 也適用 ),若是使用 Windows 請參考 Install the Add-on SDK

首先下載最新版的 Add-on SDK,您需要先安裝 npm (包含在 Node.js 中)。可以使用以下指令確認是否安裝過:

/usr/bin/env node -v

若顯示錯誤訊息如 /usr/bin/env: node: No such file or directory,則透過指令安裝:

Ubuntu

sudo apt-get install nodejs-legacy

OS X(請先安裝 Homebrew 套件管理工具

brew install node

接者透過 npm 安裝 jpm

npm install jpm --global

安裝後測試看看是否成功:

jpm

若安裝成功您應該會看到 jpm 的可用指令統整畫面。

特別的是,只要安裝 jpm 時有使用 --global flag,就不用像舊式的 cfx 工具,需要使用指令啟用 Add-on SDK 環境。

初始化一個新的專案

Web 工程師都知道要學習 HTML、JavaScrprt、CSS 最好的資源就是 Mozilla Developer Network。我們就試著用 Firefox Add-on 來把 MDN 調教改造成我們想要的樣子。

我們會先示範如何插入 JavaScript 來改變 MDN 的背景顏色,接著我們再示範如何在 MDN 的首頁上插入自己的按鈕,並且可以讓按鈕執行我們自己定義的 JavaScript。

套用 Add-on 之前的 MDN 網站

假設我們把這個新的專案叫作 mdn-mod ,第一步我們先讓 Add-on SDK 幫我們生成必要的檔案與目錄結構:

mkdir mdn-mod
cd mdn-mod
jpm init

當執行完 jpm init 之後,jpm 會詢問我們關於此附加元件的一些資訊,例如程式名稱、版本號、作者、授權條款等等,這些資訊會被用來建立 package.json 檔。現在我們只要連按 Enter 使用預設值。

完成後,我們的 mdn-mod 資料夾就會出現以下的檔案:

.
├── index.js     // Add-on 主要的 JavaScript 程式碼,程式的進入點
├── README.md    // 說明文件
├── package.json // 定義這個 Add-on 的 metadata
└── test         // 測試檔案,之後再介紹
    └── test-main.js

用 page-mod 插入 JavaScript 到指定網站

Add-on SDK 提供的一個實用 API 叫作 page-mod,其用途是當 Firefox 開啟指定的網站時,就插入一段自己的 JavaScript 到頁面上,因此可以改變特定網站的行為。

首先我們打開 index.js,加入以下幾行程式碼:

var pageMod = require("sdk/page-mod");
var data = require("sdk/self").data;

pageMod.PageMod({
    include: "*.mozilla.org",
    contentScriptFile: data.url("my-script.js")
});

第五行的 include: “*.mozilla.org” 就是我們希望套用的網址(* 代表萬用字元)。只要 Firefox 開啟的網址是以 mozilla.org 結尾,就會插入 contentScriptFile 指定的 JavaScript 檔案。在這裡我們使用了 data.url(“my-script.js”),意思是放在 data/ 資料夾下的 my-script.js 檔案。

改變 MDN 背景顏色

目前為止我們還沒定義 Content Script 要執行什麼。現在馬上新增一個檔案 data/my-script.js,插入以下一行簡單的程式碼:

document.body.style.background="red";

這行代碼會把 <body> 的背景設成紅色,等同於以下這段 CSS 的效果:

body {
    background-color: red;
}

使用乾淨的瀏覽器進行測試

完成上述步驟以後,我們的 Add-on 已經可以準備測試了。但是我們日常使用的 Firefox 可能有很多個人設定,或是安裝了很多其他 Add-on,會干擾我們的測試。此時我們只要執行

jpm run

Add-on SDK 就會幫我們開啟一個完全乾淨的 Firefox 使用者設定檔(Profile),讓我們可以在近乎出廠設定的 Firefox 底下測試我們的 Add-on。


乾淨的 Firefox Profile

當我們在新開的 Firefox 裡面開啟 http://developer.mozilla.org/,毫不意外的 MDN 的背景就變成紅色了!


MDN 的背景已經被改成紅色

添加新按鈕

除了改變現有的頁面以外,我們也可以自由的插入任何自己想要的元件。讓我們再次打開 data/my-script.js,加入以下程式碼:

var button = "<button onClick='alert(\"Hi!\")'>CLICK ME</button>";
document.body.innerHTML = button + document.body.innerHTML;

再這段程式碼裡面,我們定義了一個 html5 的按鈕,並且讓它被按下 (觸發 onClick 事件) 時,跳出一個訊息框說「Hi!」 (alert('Hi!')),緊接著就把這個按鈕插入到 body tag 的最前面。

當我們再次執行 cfx run 來瀏覽 MDN 時,就會看到畫面最上方出現了一個按鈕。

出現了 CLICK ME 按鈕

按下按鈕馬上跳出寫著「Hi!」的訊息框。

跳出了寫著「Hi!」的訊息框

打包出貨

如此一來我們的 Add-on 就大功告成了!如果要把這個 Add-on 包裝成可以分享的 xpi 格式,只要執行 jpm xpi 即可。

Add-on SDK 會生成一個副檔名為 .xpi 的安裝檔。不論是要直接傳給親朋好友,或是拿去 Firefox 附加元件網站上架都可以!

以上就是一個簡單的 Add-on 教學。

參考資訊

  1. Firefox 附加元件網站 https://add-ons.mozilla.org
  2. Firefox Add-on SDK (MDN) https://developer.mozilla.org/en-US/Add-ons/SDK
  3. Overlay Extension using XUL https://developer.mozilla.org/en-US/Add-ons/Overlay_Extensions
  4. Install the Add-on SDK https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/jpm#Installation
  5. package.json 格式說明 https://developer.mozilla.org/en-US/Add-ons/SDK/Tools/package_json
  6. page-mod https://developer.mozilla.org/en-US/Add-ons/SDK/High-Level_APIs/page-mod
  7. Packaging the add-on https://developer.mozilla.org/en-US/Add-ons/SDK/Tutorials/GettingStarted(jpm)#Packagingtheadd-on

授權

本篇原始著作衍生自〈謀智台客〉自己的瀏覽器自己改 (Part I) -利用Firefox Addon SDK開發簡單的附加元件一文,作者為 Lyu Shing,以創用 CC 姓名標示—相同方式分享條款 3.0 或更新版本授權釋出。

原文 / 自己的瀏覽器自己改 (Part 2) -利用新的 jpm Firefox Addon SDK 開發簡單的附加元件 - 小克’s 部落格
授權 / 創用CC 姓名標示-相同方式分享 4.0 國際版
作者 / 小克

φ 小克 撰寫 - Toppy、Irvin 編輯