前一段時間在作者群里大家討論,萌生了寫個油猴腳本的想法,主要作用是給頁面上增加一些好玩的功能。在寫腳本的過程中,重新整理了一些關于油猴腳本的信息,也就有了本文。 油猴腳本:是什么、能干嘛?油猴腳本,正式的叫法是用戶腳本(user script)。之所以叫做「油猴」,是因為第一個制作這個瀏覽器擴展的作者 Aaron Boodman 起名叫做 Greasymonkey,中文直譯就是「油膩的猴子」;后面其他腳本開發(fā)的時候,基本都在沿用 Greasymonkey 的一些基本規(guī)范,這些腳本也就統(tǒng)稱為「油猴腳本」了。 本文后續(xù)還是會采用本名「用戶腳本」。 你可以將用戶腳本理解為一種可以根據(jù)我們的實際需求,為網(wǎng)頁「加料」的手段。如果你之前從來沒有使用過用戶腳本又想體驗一下的話,可以按照以下步驟操作來快速感受一下它的魅力:
![]() 安裝好之后,訪問我的 作者文章頁面 (或者你喜歡的其他作者),在右側的「成就與徽章」這一部分,你就可以看到多出來了一個新的部分。如果這個作者太長時間沒有更新,就會出現(xiàn)個紅色的字體激勵作者去寫稿哦: ![]() 雖然這個腳本非常簡單,但是看到這里,你已經(jīng)了解了用戶腳本最核心的功能了。 用戶腳本的歷史與不同版本最早的時候,F(xiàn)irefox 火狐瀏覽器向開發(fā)者開放了擴展的能力,所有的開發(fā)者可以在火狐瀏覽器開放的能力內(nèi)開發(fā)一些新的能力。 2004 年底,Aaron Boodman 在看到另一個用于精簡網(wǎng)頁的擴展的時候,想到了這個絕妙的點子,隨機在 2005 年初發(fā)布了最初的 0.25版本 Greasymonkey。 ![]() 很快,大家就想到了通過 Greasymonkey 寫一些用于屏蔽廣告的腳本(這個習俗到現(xiàn)在都還有),但也被一些廣告主吐槽。不過后面等到 ADblock 上線之后大家就轉而去噴這一類擴展了。 到了 2010 年,隨著 Chrome 瀏覽器高歌猛進,另一位作者 Jan Biniok 開發(fā)了 Chrome 版本的用戶腳本管理器擴展,起名叫做 Tampermonkey,直譯應該叫做「篡改的猴子」。 我個人覺得這個名字比 Greasymonkey 更貼切一些,符合用戶腳本的實際作用。 到目前為止,Tampermonkey 已經(jīng)有超過千萬的用戶下載使用了,評分也非常高,是目前平臺支持最完整的用戶腳本擴展。Tampermonkey 在權限控制、腳本編輯和調試、全局黑白名單這些方面都做得相當不錯,易用性相比 Greasymonkey 提升了不少。 ![]() 而 2013 年 Violentmonkey「暴力猴」的上線又解決了兩個痛點:
其實 Greasymonkey 也是開源的1 GitHub 地址 ,但到 Tampermonkey 誕生的時候并沒有選擇開源,而是以捐獻軟件的形式出現(xiàn),這一點挺多人比較在意。暴力猴迭代到現(xiàn)在,也更新了非常多版本,支持的平臺已經(jīng)覆蓋了所有主流的瀏覽器平臺,不過界面上還是比較簡單。![]() 這幾款主流的瀏覽器擴展的支持情況見下表,如果有不當請留言指正。
用戶腳本的原理淺析當然了,如果要用嚴謹一點的定義來說,用戶腳本其實是一種注入式的 JavaScript 程序,在網(wǎng)頁本身的程序之外,通過一些手段,將用戶需要的數(shù)據(jù)和邏輯注入到當前的網(wǎng)頁中,達到修改界面、增加功能等等的目的。 換句話說用戶腳本也是 JavaScript。JavaScript 能實現(xiàn)的能力,用戶腳本基本也能做,比如操作頁面元素,可以給頁面中增加、刪減、修改頁面元素,最常見的去廣告腳本就是這么實現(xiàn)的。 不過用戶腳本能提供一些普通 JavaScript 實現(xiàn)不了的能力。Greasymonkey 在最早的 0.25 版本中就帶來了兩個基本的功能:
這兩個功能到現(xiàn)在為止仍然非常核心,這里稍微解釋一下背景。 跨域請求為了安全起見,瀏覽器在頁面加載的時候會有一個同源策略,如果頁面中的 javaScript 來自另一個域名,瀏覽器就會認為這個不安全不讓其加載運行,但有的時候用戶可能會有一些別的需求。 舉個例子:比如說在京東或者當當上買書的時候,想看一下豆瓣上用戶的評分,這種情況下就需要用到用戶腳本的這個能力了。在京東的頁面中,我們就可以借助用戶腳本調用這個 菜單操作很多情況下,用戶腳本不需要自動執(zhí)行,而是需要使用者來手動運行,這時就需要 舉個例子:我在頁面中看到一個不認識的單詞,想要查詢一下,這時候選中這個單詞,然后觸發(fā)這個接口,就可以實現(xiàn)查詢的效果(當然也有很多的別的能力可以實現(xiàn)劃詞查詢)。 除了這兩個功能之外,目前的用戶腳本,大多采用了 Greasemonkey 制定的 V4 API 規(guī)范。通過這個規(guī)范,我們就能知道用戶腳本可以做什么了。
在 V3 版本的 API 中,還多了幾個能力,包括:
不過上述的幾個用戶腳本擴展也出現(xiàn)了一些自己的差異,比如 Tampermonkey 就支持了插入節(jié)點的能力,也支持獲取當前標簽頁面信息的能力。 如果你是一個用戶腳本開發(fā)者,需要注意一下這些差異點。 從哪里獲取用戶腳本指望每一個人都去自己寫腳本是不現(xiàn)實的,這需要大家有一些基本的前端開發(fā)能力。大部分的用戶都是去找一些現(xiàn)成的腳本來使用,這就是所謂的「腳本源」。 最早期的腳本源,最有名的是 userscript.org 站點,不過由于維護不力,導致后面充斥著各種各樣的有害腳本,非常影響大家使用。目前這個站點已經(jīng)下了,我也沒有給它加上可以點擊的超鏈接。 如果你想體驗,可以訪問 https:/// 這個鏈接來找到之前的老腳本。 當然我更推薦下面的幾個腳本源:
當然,直接在 GitHub 上去找腳本也是個不錯的選擇。 用戶腳本 vs. 瀏覽器擴展在上面提到的劃詞翻譯這個例子中我們其實引入了這樣一個問題:同樣一個需求,如果瀏覽器擴展和用戶腳本都能實現(xiàn),我們應該如何選擇? 一方面,瀏覽器擴展相比用戶腳本誕生的時間其實更晚,各家的瀏覽器擴展后發(fā)制人,的確也有了比用戶腳本強得多的功能實現(xiàn);但另一方面,雖然腳本能力有限,但是它們占用的系統(tǒng)資源和內(nèi)存又更少一點。 ![]() 另外,從安全性角度上來說,用戶腳本雖然也爆出過不少 竊取個人信息、替換返利鏈接2 有的腳本作者也會直接在介紹中表示靠返利來補貼服務器費用等,是否要繼續(xù)安裝就看使用者自己了。 甚至 挖礦 的負面新聞,但用戶腳本的源代碼審查相比瀏覽器擴展更為直接透明,選擇合適的用戶腳本獲取渠道、留意腳本的權限請求,有基礎的用戶也可以多多留意、檢查腳本內(nèi)容,一般就能規(guī)避大部分風險。因此我自己的解決方案是,對于輕量一些的場景,通過用戶腳本+用戶樣式(user style)解決大部分瀏覽需求,重一些的場景則會選擇瀏覽器擴展。當然了,如果你的設備對保密性和安全等級有著較高的要求,我還是不建議你安裝任何用戶腳本。 結語用戶腳本作為一個 17 年前的互聯(lián)網(wǎng)老古董,現(xiàn)如今仍有自己的用武之地,還是十分令人感慨。但作為油猴使用指南的第一期,本文僅為增加大家對「油猴腳本」的一點了解,如果你想解鎖用戶腳本的全部實力、甚至自己動手制作用戶腳本,還請留意本系列的后續(xù)內(nèi)容更新。 > 下載 少數(shù)派 2.0 客戶端、關注 少數(shù)派公眾號,解鎖全新閱讀體驗 ?? > 實用、好用的 正版軟件,少數(shù)派為你呈現(xiàn) ?? |
|
來自: suzzwzzw > 《網(wǎng)絡》