GreaseMonkey

**Greasemonkey**，簡稱 **GM**，中文俗稱為「**油猴**」，是 Firefox 的一個附加元件。它讓使用者安裝一些指令碼使大部分 HTML 為主的網頁於使用者端直接改變得更方便易用。

Greasemonkey 可替網頁加入些新功能（例如在亞馬遜書店嵌入商品比價功能）、修正網頁錯誤、組合來自不同網頁的資料、或者數繁不及備載的其他功能。寫的好的 Greasemonkey 指令碼甚至可讓其輸出與被修改的頁面整合得天衣無縫，像是原本網頁裡的一部分。

## 技術明細

大部分 Greasemonkey 使用者指令碼都是自行撰寫，使用對某網站專用的 JavaScript 代碼，透過文件物件模型（DOM）介面對網頁內容做操作。userscripts.org 維護了個 Greasemonkey 資料庫。該資料庫描述哪個網址網頁對應到哪個指令碼。（注意：廢棄指令碼倉庫**可能**還保留許多還沒合併到新倉庫的指令碼）。但由於 userscripts.org 在 2014 年 5 月發生技術故障而無法存取，一些開發者另設網站以釋出指令碼，Greasemonkey 官網也在其官方 Wiki 站點設立列表（頁面存檔備份，存於網際網路檔案館）以展示這些網站。

當使用者載入匹配的網頁，Greasemonkey 便呼叫相關的指令碼，而該指令碼便根據指令碼內容改變網頁的內容。Greasemonkey 指令碼亦能透過非網域綁定的 XMLHTTP 要求來查詢外部 HTTP 資源。Greasemonkey 亦遵循某使用者名.user.js 的格式，這讓當該特定使用者拜訪時 Greasemonkey 可自動偵測並提供安裝選項。除了 JavaScript 代碼，Greasemonkey 指令碼包括有限可選用後資料集。該後資料集描述了指令碼名稱、指令碼描述、網址用來區分同名指令碼的位址空間、以及原本該指令碼為哪些網址撰寫的列表。

* Greasefire 擴充：同 Greasemonkey 擴充配合使用，自動顯示在 userscripts.org 的指令碼庫中是否存在可以在當前正在瀏覽網站上使用的指令碼，如果存在 Greasemonkey 的猴頭圖示背景就會變為彩色的。右鍵點擊猴頭圖示，最上面一行就是打開當前網站可用指令碼列表的選項。
* Platypus（platypus.mozdev.org）附加元件可讓使用者可以編輯網頁（刪除或者移動某礙眼的部分）。Platypus 隨後將結果存成常駐的 Greasemonkey 指令碼。

## 典型的指令碼

使用者群已發展大量的指令碼，以下是其中的一些應用：

* 調整 Gmail 讓 Google Reader 內嵌，因而提供 RSS 新聞訂閱的選項。
* 當線上瀏覽某本書時同時顯示對手網站同本書價錢。
* 去除來自某些站的廣告，包括彈出視窗與 Google 文字廣告。
* 改變網頁的版面，包括原本該網頁作者未考慮到的元素大小與瀏覽器畫面大小。
* 自動完成表單。
* 瀏覽某些佈告欄網站自動過濾特定的發帖人。
* 增刪網頁上的某些功能。
* 讓使用者從某些影片站點如 Google Video 以及 YouTube 存下 FLV 或 MP4 視訊檔案。
* 從現行網頁找尋任何 RSS 新聞訂閱，並將它們顯示在可擴展、漂浮於網頁上的面板裡。
* 將百度貼吧輸入框裏的文字轉換為圖片發表，或者在發貼時自動附加指定語句（俗稱「小尾巴」）。

## 隨使用者指令碼引發之技術、操作、及道德上的問題

許多 Firefox 社群的成員，以及相當多的技術分析師，警告 Greasemonkey 的使用氾濫，並且相關的使用者指令碼技術需要在發佈時更注意。他們的關注包括：

* 可能讓某些廣告網站生意受阻。許多 Firefox 使用者已經利用 Adblock Plus 屏閉掉網頁廣告，不過 Greasemonkey 可被用來換掉原廣告主的廣告成為它競爭對手的廣告。這導致對網頁廣告人為灌水，或者戲弄被付費廣告商的統計程式。
* 增加網站每頁的垃圾流量。某些 Greasemonkey 指令碼是設計來取得使用者拜訪哪些網頁的額外資訊，比如那些從 del.icio.us、黑米、或者 Bloglines 提供的指令碼。如果這些指令碼被廣泛使用，它們有可能造成被拜訪網站不必要的額外流量。
* 隨著許多網頁專用的指令碼激增，分辨某網頁的問題是實際上網頁編程上的 BUG，還是存取者本地端 Greasemonkey 指令碼的困難度也隨之增加。基於如此，抓蟲除錯更為麻煩。
* 指令碼錯誤大致肇因於 Greasemonkey 開發者與網站開發者缺乏互動。
* Greasemonkey 只有對 HTML 網頁有效，對於 Flash、Flex，以及 Silverlight 開發的網頁無效。
* 多樣化網際網路應用程式對 Greasemonkey 指令碼開發者來說比靜態網頁更困難控制。這是因為該網頁程式執行越多的邏輯，Greasemonkey 作者得考慮得越複雜才不會打擾到原本程式的功能。
* 原本的網站開發者推出新版時會造成相對應 Greasemonkey 指令碼停止工作。因此，沒有與原本網站開發者互動而撰寫的 Greasemonkey 指令碼可能在一時發揮作用，但終非長遠之計。

## Greasemonkey 與其它瀏覽器的相容性與相等軟體

### 其他 Mozilla 為基礎的瀏覽器

Greasemonkey 可直接用於 Firefox、Flock、與 Epiphany。Epiphany Greasemonkey 是 Epiphany 附加元件包的一部分。然而，該附加元件並不完全相容於 2.15.1 版，導因於某些 Greasemonkey 應用程式介面功能（例如：_GM\_getValue_）不支援。此外，也有自訂版本的 SeaMonkey：xsidebar.mozdev.org/modifiedmisc.html#greasemonkey。

### Opera

Opera 第 8 版也增加了使用者指令碼功能 Archive.is 的存檔，存檔日期 2012-09-10。隨著 Opera 與 Firefox 支援 W3C 文件物件模型（DOM），許多 Greasemonkey 使用者指令碼現在在 Opera 下執行正確。

### Konqueror

Konqueror 使用者指令碼 （頁面存檔備份，存於網際網路檔案館）是一種給 KDE Konqueror 的網頁修改工具，其目的在相容於 Greasemonkey 指令碼與後資料集。它以一種 KPart 而存在。

## 類似軟體

* Scriptish 具備和 Greasemonkey 一樣的作用，所有 Greasemonkey 指令碼都能在 Scriptish 中執行。Scriptish 源於 Greasemonkey，但對後者做了改進。
* Proxomitron，開發於 1990 年代晚期，程式於 JavaScript 前載入並主動監視 HTTP 串流，因此它為跨瀏覽器相容，並且透過正規表示式相似的比對語言提供類似 Greasemonkey 的功能。
* Proximodo（頁面存檔備份，存於網際網路檔案館）受 proximitron 啟發並可相互操作；是一種開源軟體，客戶端代理伺服器所以允許對網頁內容動手腳。
* Privoxy （頁面存檔備份，存於網際網路檔案館）是一種開源軟體，客戶端代理伺服器所以允許對網頁內容動手腳。它支援很多操作系統。
* MouseHole 是一種開源軟體，客戶端代理伺服器，允許對網頁內容透過 Ruby 動手腳。
* Monkeygrease （頁面存檔備份，存於網際網路檔案館）是一種 JavaServlet 可用來修改客戶端接收到之前的 Java（著作權軟體）網頁程式輸出。
* Chickenfoot （頁面存檔備份，存於網際網路檔案館）是一種 Firefox 的附加元件用於讓終端使用者與駭客於網頁上指令碼互動。
* 給 Firefox 用的 iMacros 是一種 Firefox 的附加元件讓使用者紀錄並重播所謂「網際網路巨集」，用來執行網頁自動化、分析網頁、以及測試網頁。
* Stylish 是一種 Firefox 的附加元件透過改變使用者端的 CSS，進而改變網頁的編排。
* Bookmarklets 可以在任何網頁隨心所欲的執行 JavaScript，不過它需要使用者點擊啟用，而非自動執行。
* Firebug 是一種開發者附加元件讓使用者隨心所欲的透過 DOM 即時改變網頁。

## 其他選擇

在沒有附加元件像 Greasemonkey 的情況下，修改網站也可以透過下面幾種方式：

* 於網址列鍵入 javascript:，或者使用 bookmarklets。
* 使用瀏覽器的 DOM 檢視器。
* 使用本地端 HTTP 代理伺服器，如 WebWasher、Privoxy 或 Proxomitron 以更改 HTML。
* 使用 Opera 瀏覽器 + 使用者.js 指令碼。

## 參見

* Adblock
* Firefox 擴充套件列表

## 參考文獻

## 外部連結

* Greasemonkey 下載站點（自動在地化）
* （英文）Greasemonkey 官方網站（頁面存檔備份，存於網際網路檔案館）
* （英文）Greasemonkey Wiki （頁面存檔備份，存於網際網路檔案館）
* （英文）Greasemonkey source code （頁面存檔備份，存於網際網路檔案館）
* （英文）《一頭栽進 Greasemonkey（頁面存檔備份，存於網際網路檔案館）》，一本用於教導 Greasemonkey 指令碼撰寫的免費書籍，由 Mark Pilgrim 著作
* （英文）舊 Greasemonkey 指令碼儲藏庫包括很多使用者為其個人需要撰寫，上傳併分享給大眾的指令碼。
* （英文）userscripts.org（Greasemonkeyed.com 為其前身）- 取代 dunck.us 的指令碼倉庫。
* （英文）Greasefire 必需配合「Greasmonkey」才能運作，因此安裝「Greasefire」前得先安裝「Greasmonkey」才行。安裝完「Greasefire」後，只要所瀏覽的網頁在「Userscripts.org」有可用的 GM Script，「Greasmonkey」的猴子狀態列圖示便會亮起來。
* （英文）Greasemonkey 禮節 Archive.is 的存檔，存檔日期 2005-04-12
* （英文）Greasemonkey 與其在商業模型的效果
* （英文）指令碼編譯器 （頁面存檔備份，存於網際網路檔案館）用來轉換 Greasemonkey 指令碼成 Mozilla 附加元件。
* （英文）Greasemonkey 編譯器轉換 Greasemonkey 使用者指令碼成完整的 converts Greasemonkey Mozilla 附加元件。
* （英文）給非技術人員的 Greasemonkey 解釋（頁面存檔備份，存於網際網路檔案館）
* （英文）browserscripts.org 指令碼社群。
* （英文）Greasemonkey 在企業 （頁面存檔備份，存於網際網路檔案館） - 部落格系列，主題關注當使用 Greasemonkey 於 IT 專案時保全與發佈問題。
* （英文）InternetDuctTape.com （頁面存檔備份，存於網際網路檔案館） - 安裝與使用 Greasemonkey 使用者指令碼新手指南。

### 評論

* （英文）Festa, Paul. Firefox add-on lets surfers tweak sites, but is it safe?. CNET. 2005 年 3 月 24 日 [2007 年 10 月 24 日]. （原始內容存檔於 2006 年 9 月 5 日）.
* （英文）Singel, Ryan. Firefox Users Monkey With the Web?. Wired magazine. 2005 年 5 月 17 日 [2007 年 10 月 24 日]. （原始內容存檔於 2008 年 9 月 6 日）.