零基礎(chǔ)油猴腳本安裝、配置、開發(fā)入門教程(圖文)
先決條件
- 安裝油猴插件。
- 了解基本的 js 語(yǔ)言知識(shí)。
- 請(qǐng)首先閱讀配置本地開發(fā)環(huán)境,雖然是【可選】但里面有部分基本的標(biāo)簽配置的講解,如果是第一次進(jìn)行開發(fā),推薦快速閱讀該部分。
配置本地開發(fā)環(huán)境【可選】
- 油猴支持在它提供的網(wǎng)頁(yè)編輯器中進(jìn)行開發(fā),但我一般喜歡用 vscode 等本地的 ide 進(jìn)行開發(fā),油猴插件支持訪問(wèn)本地文件,來(lái)進(jìn)行本地開發(fā),下面就來(lái)配置一下如何在本地進(jìn)行開發(fā),如果不需要此步驟的同志,可以跳過(guò)。
- 首先在擴(kuò)展程序中找到 Tampermonkey,并點(diǎn)擊進(jìn)入詳情。

- 打開允許訪問(wèn)文件網(wǎng)址選項(xiàng)。

- 此時(shí),我們?cè)诒镜匚募袆?chuàng)建一個(gè) js 文件,如:
D:\code\font_end\practice\monkey\example\demo.js。并在此文件中編輯一個(gè)簡(jiǎn)單的代碼。
(function () {
console.log("天行健,君子以自強(qiáng)不息?。?!")
})();
- 右擊頂部工具欄中的油猴插件圖標(biāo),在彈出的操作框中選擇添加新腳本。

- 之后你將進(jìn)入一個(gè)編輯頁(yè)面,我們來(lái)看看在這個(gè)編輯頁(yè)面中一些基本的知識(shí)點(diǎn)。

這里重要的點(diǎn)有兩個(gè),一個(gè)是設(shè)置匹配的網(wǎng)站,默認(rèn)的初始生成的代碼中,沒有對(duì) https 的網(wǎng)址進(jìn)行匹配,僅對(duì) http 網(wǎng)址進(jìn)行了匹配,所以要自己添加。這里 @match 標(biāo)簽的作用是讓你的腳本在 @match 標(biāo)簽僅在規(guī)定的網(wǎng)站上運(yùn)行,比如 @match https://www.baidu.com,表示在百度這個(gè)網(wǎng)址下運(yùn)行。再比如,@match https://\*//* 表示在所有 https 下的網(wǎng)站都可以運(yùn)行。
第二個(gè)就是通過(guò) @require 標(biāo)簽來(lái)添加你本地的文件地址,這樣當(dāng)你在本地進(jìn)行開發(fā)的代碼,就可以直接在對(duì)應(yīng)的網(wǎng)站上執(zhí)行了。當(dāng)然 @require 標(biāo)簽還可以用來(lái)引入一些你開發(fā)時(shí)需要的第三方庫(kù),如 jQuery。
- 隨便打開一個(gè)網(wǎng)站,如
https://www.baidu.com(百度),打開它的控制臺(tái),我們就發(fā)現(xiàn)腳本已經(jīng)執(zhí)行了,并且油猴插件會(huì)顯示正在執(zhí)行的腳本。
【注】可以看到在網(wǎng)頁(yè)編輯頁(yè)面有一個(gè) UserScript 包裹的部分,里面包含了如@name,@namespace等,這些稱之為用戶腳本標(biāo)簽,你可以在官方文檔中查看所有的標(biāo)簽。
快速插入復(fù)雜的 HTML
在油猴腳本開發(fā)的過(guò)程中,有時(shí)候需要插入一些自己的 HTML 結(jié)構(gòu)。一般來(lái)說(shuō)通過(guò) innerHTML 來(lái)實(shí)現(xiàn)這種需求。下面舉一個(gè)簡(jiǎn)單的例子。
比如我現(xiàn)在在百度的 logo 下面希望增加如下的結(jié)構(gòu):
<div>
<div class="h1">標(biāo)題</div>
<p class="des">這是一段描述</p>
</div>
那么我們?cè)谀_本中可以這樣書寫
// 快速創(chuàng)建復(fù)雜 HTML 結(jié)構(gòu)
function createHTML() {
// 獲取百度首頁(yè) logo
let logo = document.querySelector("#lg")
// 創(chuàng)建一個(gè)自己的結(jié)構(gòu)
let example = document.createElement("div")
// 給 example 這個(gè) div 設(shè)置類名
example.classList.add("wrap")
example.innerHTML = `<div class="h1">標(biāo)題</div>
<p class="des">這是一段描述</p>`
logo.appendChild(example)
}
(function () {
'use strict';
console.log("learn_style")
createHTML()
})();
腳本編輯頁(yè)面我做了如下的配置。主要是設(shè)置了 @match 標(biāo)簽和 @require 標(biāo)簽。
// ==UserScript==
// @name example
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match https://www.baidu.com
// @icon data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant none
// @require file:///D:\code\font_end\practice\study_monkey\learn_style.js
// ==/UserScript==
(function() {
'use strict';
// Your code here...
})();
現(xiàn)在我們打開百度首頁(yè)查看效果

除了“這是一段描述”這句話被百度自身的樣式遮蓋了外,至少創(chuàng)建一個(gè) HTML 的結(jié)構(gòu)的目標(biāo)是達(dá)到了。
使用 innerHTML 的方式可以快速創(chuàng)建一個(gè)比較復(fù)雜的,油猴腳本需求的 HTML 結(jié)構(gòu)。
設(shè)置 CSS 樣式
上面的一節(jié)介紹了如何快速創(chuàng)建一個(gè)復(fù)雜的 HTML 結(jié)構(gòu),接下來(lái),我們繼續(xù)上面的教程,來(lái)看看如何為這個(gè) HTML 結(jié)構(gòu)添加一個(gè) css 樣式。
首先,我們要在 @grant 標(biāo)簽中設(shè)置 GM_addStyle

然后,我們就可以直接編寫 css 樣式的代碼
// 這里是創(chuàng)建 HTML 的代碼,參考上一節(jié)
function createHTML() {...}
// 添加 css 樣式
function addStyle() {
let css = `
.wrap{
padding: 5px
}
.h1{
font-size: 16px;
color: green;
}
.des{
font-size: 10px;
}
`
GM_addStyle(css)
}
(function () {
'use strict';
console.log("learn_style")
createHTML()
addStyle()
})();
最終效果可以看到實(shí)現(xiàn)了(PS:因?yàn)樗阉骺虮旧淼臉邮綋踝×搜菔拘Ч?,所以刪除)

發(fā)布與更新你的腳本
通常我們會(huì)選擇一個(gè)油猴插件應(yīng)用商店來(lái)發(fā)布自己的插件,通常大家會(huì)選擇 greasyfork,具體的操作可以參考下面的內(nèi)容:
對(duì)于更新,通常我的流程是如下:
- 在本地進(jìn)行開發(fā)和測(cè)試(測(cè)試有一個(gè)測(cè)試版插件)。
- 測(cè)試成功后,將其推送到 github 上存檔。
- 復(fù)制你的腳本代碼到 greasyfork 進(jìn)行更新。
常見標(biāo)簽簡(jiǎn)析
@connect
當(dāng)用戶使用 GM_xmlhttpRequest 請(qǐng)求遠(yuǎn)程數(shù)據(jù)的時(shí)候,需要使用 connect 指定允許訪問(wèn)的域名,支持域名、子域名、IP地址以及*通配符。
它的語(yǔ)法如下:// @connect <value>。value 通常是不帶頂級(jí)域名的子域名,如 baidu.com。具體的 value 還可以有其它的值,你可以訪問(wèn)這個(gè)鏈接。
另外將 @connect * 添加到腳本中。通過(guò)這樣做,Tampermonkey 仍會(huì)詢問(wèn)用戶是否允許下一次連接到未提及的域,但還會(huì)提供“始終允許所有域”按鈕。如果用戶單擊此按鈕,則將自動(dòng)允許所有未來(lái)的請(qǐng)求。
@grant
該標(biāo)簽的作用是可以調(diào)用油猴本身提供的一些 API 與瀏覽器互動(dòng),突破本身的一些安全策略。比如該標(biāo)簽可以調(diào)用 GM_* 函數(shù),來(lái)獲取一些應(yīng)用程序接口,比如如果要進(jìn)行跨域,可以使用 GM_xmlhttpRequest 函數(shù)。
@include
腳本可以運(yùn)行的頁(yè)面。允許多個(gè)標(biāo)簽實(shí)例(即允許匹配多個(gè)網(wǎng)址)。特別的是 @match 標(biāo)簽的作用和它幾乎類似,但有更加嚴(yán)格的語(yǔ)法。推薦使用 @match 標(biāo)簽。
// 示例 // @include http://www.tampermonkey.net/* // @include http://* // @include https://* // @include /^https:\/\/www\.tampermonkey\.net\/.*$/ // @include *
@require
指向在腳本本身(編輯頁(yè)面中的腳本)開始運(yùn)行之前加載和執(zhí)行的 JavaScript 文件。我們可以利用該標(biāo)簽引入諸如 jQuery 這樣的第三方庫(kù)或者關(guān)聯(lián)本地文件進(jìn)行開發(fā)。
- 引入 jQuery 庫(kù)示例:
// @require https://code.jquery.com/jquery-2.1.4.min.js。 - 引入本地文件進(jìn)行開發(fā)示例:
// @require file:///D:\code\font_end\practice\study_monkey\learn_style.js
【注】引入本地文件進(jìn)行開發(fā),還需要對(duì)油猴插件進(jìn)行設(shè)置,詳細(xì)請(qǐng)看配置本地開發(fā)環(huán)境【可選】
常見應(yīng)用程序接口簡(jiǎn)析
GM_xmlhttpRequest
該函數(shù)提供了進(jìn)行 xmlhttpRequest 請(qǐng)求的功能。如果你要使用該函數(shù),則務(wù)必對(duì) @connect 標(biāo)簽進(jìn)行設(shè)置。
下面展示 GM_xmlhttpRequest 方法的一個(gè)實(shí)例,實(shí)例來(lái)源 MoreMovieRating 油猴插件。
function getURL_GM(url) {
return new Promise(resolve => GM.xmlHttpRequest({
method: 'GET',
url: url,
onload: function (response) {
if (response.status >= 200 && response.status < 400) {
resolve(response.responseText);
} else {
console.error(`Error getting ${url}:`, response.status, response.statusText, response.responseText);
resolve();
}
},
onerror: function (response) {
console.error(`Error during GM.xmlHttpRequest to ${url}:`, response.statusText);
resolve();
}
}));
}
GM_addStyle
在腳本開發(fā)中,有時(shí)需要操作 css 樣式,油猴腳本提供了 GM_addStyle 方法用來(lái)方便的解決這個(gè)問(wèn)題,具體的實(shí)例參考上面的設(shè)置 CSS 樣式。
總結(jié)
到此這篇關(guān)于零基礎(chǔ)油猴腳本安裝、配置、開發(fā)入門教程(圖文)的文章就介紹到這了,更多相關(guān)油猴腳本開發(fā)入門內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
javascript 對(duì)象數(shù)組根據(jù)對(duì)象object key的值排序
本文僅僅是實(shí)現(xiàn)了javascript 對(duì)象數(shù)組根據(jù)對(duì)象object key的值排序,算是對(duì)自己學(xué)習(xí)javascript這么久的一個(gè)小結(jié),希望大家能夠喜歡2015-03-03
深入淺出JS的Object.defineProperty()
這篇文章主要介紹了深入淺出JS的Object.defineProperty(),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下2022-06-06
JavaScript設(shè)計(jì)模式之責(zé)任鏈模式實(shí)例分析
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之責(zé)任鏈模式,結(jié)合實(shí)例形式分析了責(zé)任鏈模式的概念、原理及具體定義與使用技巧,需要的朋友可以參考下2019-01-01
JavaScript鼠標(biāo)拖動(dòng)事件監(jiān)聽使用方法以及實(shí)例效果演示
最近工作中遇到了鼠標(biāo)拖動(dòng)事件監(jiān)聽的相關(guān)需求,所以下面這篇文章主要給大家介紹了關(guān)于JavaScript鼠標(biāo)拖動(dòng)事件監(jiān)聽使用方法以及實(shí)例效果演示的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-05-05
JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解
這篇文章主要介紹了JS字符串與二進(jìn)制的相互轉(zhuǎn)化 ,在文中給大家提到了Js之字符串和字節(jié)碼之間的相互轉(zhuǎn)換,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-06-06
JavaScript面向?qū)ο笾w會(huì)[總結(jié)]
看過(guò)很多JavaScript書,對(duì)JavaScript的面向?qū)ο笾v的都比較深入,但是并沒有做到深入淺出,總結(jié)了我做的一些JavaScript程序的經(jīng)驗(yàn),以簡(jiǎn)潔明了的文字使大家明白JavaScript面向?qū)ο蟮膶?shí)現(xiàn)。2008-11-11
JavaScript獲取當(dāng)前時(shí)間戳5種方法匯總
很多時(shí)候我們都把時(shí)間戳作為id值,下面這篇文章主要給大家介紹了關(guān)于JavaScript獲取當(dāng)前時(shí)間戳的5種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
HTML+JavaScript模擬實(shí)現(xiàn)簡(jiǎn)單的時(shí)鐘效果
在這篇文章中,主要將向大家展示如何使用?HTML、CSS?和?JavaScript代碼制作模擬時(shí)鐘,文中的示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08

