遇到網頁的行為不如己意,具有駭客精神的人常會忍不住想矯正它。這類情境便是 Firefox 的 GreaseMonkey 或 Chrome 的 TamperMonkey 登場的時機,針對特定網址加入一段 JavaScript, 把網頁捏成你要的形狀。

至於 IE,在古早時代曾有 Trixie 套件能實現類似功能,但隨著 IE 升級 Trixie 不再相容,IE 市佔日漸萎縮,這塊已成空窗多時。而我平日除了少數工作需求要連一些 IE Only 網頁,其餘已全都改用 Chrome,早該從地球消失的 IE 缺功能就缺功能唄,誰在乎呢?

BUT,人生最機車的就是這個 BUT 了。

最近遇到某個 IE Only 網頁缺了一個功能導致操作不便,提需求改系統又難如登奇萊山,自己加段 Script 自力救濟看來是最方便可行的捷徑。但別人有 GreaseMonkey 有 TamperMonkey,獨獨 IE 沒有自己的猴子... 那就自己養一隻吧!

既然是本部落格培育的品種,就叫做 DarkMonkey / 黑暗猴子 好了。

原理利用 Windows API 找到 IE 視窗,取回 IHTMLDocument2 介面,使用 C# 存取及操作網頁 DOM 物件,實現對網站注入 JavaScript 的目的。其運作機制設計如下:

  1. 將要注入的 Script 存成一般 .js 檔,最上方加註 //Name: 及 //UrlMatch: 標註 Script 名稱及比對 URL 用的 RegularExpression 樣式,另外加上 //Disabled 可暫時停用。其餘部分就是要丟進網頁執行的 JavaScript 程式碼。
  2. 程式啟動會讀取同目錄下的 *.js 檔案產生監控對象清單並顯示在介面上。
  3. 程式以每秒一次的頻率進行檢查,為了節省不必要運算,監測程序只有在切換到 IE 時才啟動。為區別是否處於啟用狀態,DarkMonkey 平時為半透明,當操作焦點移到 IE 時才轉成不透明。
  4. 當比對 IE 開啟網頁的 URL 相符時,DarkMonkey 會取得該網頁的 Document 物件,執行預先定義的 Script,並在 <body> 加上 data-dark-monkey Attribute 標示已處理,避免重複執行。
  5. 每次注入 Script 時,清單中的項目會閃一下黃底做為提示,狀態列亦會留下時間記錄。
  6. 清單介面可停用及啟用特定 Script 項目,建議停用未使用中的項目,可省去不必要的檢查迴圈,提高效能。

更多的操作細節請看示範:

展示影片

原始碼我放上 Github 了,有需要的同學請自取。

My simple GreaseMonkey/TamperMonkey-like tool for IE.


Comments

# by Huang

長知識了,謝謝

# by 小熊子

謝謝黑大!好用!

# by TrixIE WPF4.5

能编译下,直接提供exe文件下载吗?

Post a comment