在浏览器插件中,功能最多的毫无疑问是油猴插件:Tampermonkey
。它里面可以自定义安装很多插件,一款插件就可以实现很多常用的功能:
网页去广告,去除禁止复制权限
购物比价
网页选词翻译
VIP视频播放
虽然中间会穿插一些广告,但是用着还是特别的方便的。
而且Tampermonkey
允许用户通过编写和安装用户脚本来修改网页内容和行为。用户脚本可以用来修改网页的内容、自动填写表单、添加功能等。我自己也准备写些油猴脚本,来处理一些问题。
而这篇文章介绍如何快速入门编写Tampermonkey
脚本。
Tampermonkey
是一种流行的用户脚本管理器,广泛用于各大浏览器如 Chrome、Firefox、Safari 和 Microsoft Edge。用户脚本是一种用JavaScript编写的浏览器脚本,可以修改网页上的内容、添加新功能或自定义网页行为。
链接直达
Tampermonkey 油猴脚本(篡改猴)
是一款功能强大的浏览器扩展功能,拥有超过1000万用户,可以在网站上运行用户脚本,从而提升您的浏览体验。
许多中国用户称篡改猴为油猴。 用户脚本是一些小型程序,可以修改页面布局、添加或删除功能以及自动执行操作,个性化您的网络体验。
Tampermonkey可以让用户轻松管理和运行用户脚本,通过简单的安装和配置,用户可以在浏览器中添加各种自定义脚本来改善网页浏览体验。一些常见的用途包括自动化任务、广告屏蔽、界面定制、网页功能增强等。
Tampermonkey提供了一个用户友好的界面,让用户可以方便地添加、编辑、删除和启用/禁用用户脚本。用户还可以根据需要设置脚本的运行时机、匹配的网址规则等。
总的来说,Tampermonkey是一个功能强大且易于使用的用户脚本管理器,为用户提供了丰富的自定义和扩展功能,可以让用户根据个人需求来定制和改进他们的网页浏览体验。
编写油猴(Tampermonkey)脚本是为了在网页上自动化执行特定任务或修改页面行为。
以下是编写油猴脚本的基本步骤:
安装油猴插件:
插件地址见第一章简述
创建新脚本:
在浏览器中打开油猴插件的管理界面。通常可以通过浏览器右上角的油猴图标访问。
编辑脚本:
定义元数据:
保存和应用:
调试和优化:
分享和安装(可选):
通过这些步骤,你可以编写并在浏览器中使用自己定制的油猴脚本,从而增强你的浏览器体验或提高工作效率。
在编写油猴(Tampermonkey)脚本时,
注释/注解是非常重要的部分
。它们不仅提供了脚本的元数据,还定义了脚本在何时、何地运行以及如何与网页互动。油猴脚本的注释通常放在脚本的开头,使用
@符号来标记不同的元数据字段
。
那如果我们编写脚本的时候,把脚本的注释全部删掉,会导致什么样的后果呢?
可以将油猴脚本的注释/注解全部删除,但请注意,
这会使脚本无法在油猴插件中正确识别和运行。注释/注解包含了脚本的元数据,例如脚本的名称、版本、适用的URL等,这些信息是油猴插件正确运行脚本所必需的
。
我们在上一章中,可以看到新建用户脚本时,在脚本的头部已经有一些注释/注解了,那他们都代表什么意思呢?除了这些,还有哪些是比较常用的,他们的用法是怎样的呢?
这个是新建脚本时的头部注解:
// ==UserScript==
// @name 脚本名称
// @namespace http://tampermonkey.net/
// @version 版本号
// @description 脚本描述
// @author 作者
// @match 适用URL模式
// @grant 所需权限
// ==/UserScript==
@namespace
与 @name
这两个属性被作为脚本的唯一标识符,用户脚本管理器根据它们来判断一个脚本是否已安装。Greasy Fork 也需要这些属性,若用户在更新脚本时改变了两者中的任意一项,将发出警告。none
表示不需要任何特殊权限。更多详细内容参见
:用户脚本属性值
这里重点讲一下,脚本的适用的网页地址或匹配规则。
在油猴(Tampermonkey)脚本中,
@include
、@exclude
和@match
是用来指定脚本在哪些网页上运行的关键注释。
@match:指定了脚本适用的URL模式。这个模式可以是简单的通配符,也可以是正则表达式,用来匹配页面的URL。
// @match https://*.example.com/*
// @match http://example.com/*
// @match https://example.com/path/to/page*
example.com
域名下的页面,以及特定路径下的页面。@include:与 @match
类似,也用来指定脚本适用的URL模式。不过,@include
更加灵活,支持使用正则表达式来定义匹配规则。
// @include /^https?:\/\/.*\.example\.com\/.*$/
http
或 https
开头,且域名为 example.com
的页面。@exclude:用于排除某些URL模式,即使它们符合 @match
或 @include
的规则。通常用于限制脚本运行的范围。
// @exclude https://example.com/ignore-this-page
https://example.com/ignore-this-page
页面上运行,即使它符合其他的匹配规则。如何选择使用这些注释?
综合使用这些注释可以精确控制油猴脚本的运行范围,确保它们只在需要的页面上执行,从而提升用户体验和脚本效率。
@grant
是油猴脚本中常用的注释指令,用于指定脚本需要的权限或特权。通过@grant
指令,你可以告诉油猴脚本引擎为你的脚本提供特定的 API 权限,以便你可以在脚本中使用这些 API。
常见的 @grant
指令包括:
none
GM_addStyle
GM_addStyle
函数来添加自定义样式。GM_getValue
GM_setValue
:表示脚本需要使用 GM_getValue
和 GM_setValue
函数来进行数据存储和读取。GM_listValues
GM_xmlhttpRequest
GM_xmlhttpRequest
函数来进行跨域请求。GM_notification
unsafeWindow
unsafeWindow
对象,这是一个潜在的安全风险,需要谨慎使用。根据你的需求,你可以在 @grant
指令中选择适当的权限,以便脚本能够访问所需的功能和资源。在使用特定的 API 之前,请确保为脚本授予了相应的权限。
@require
用于在油猴脚本中引入外部脚本或库文件。通过@require
指令,你可以告诉油猴脚本引擎在执行脚本之前先加载指定的外部脚本或库文件,以便在脚本中使用这些外部资源。
加载外部JavaScript库:
// @require https://code.jquery.com/jquery-3.6.0.min.js
@require
注释来加载外部的JavaScript库。需要确保引用的URL指向一个有效的JavaScript文件。加载多个库:
// @require https://code.jquery.com/jquery-3.6.0.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.21/lodash.min.js
@require
注释来加载多个库。它们会按顺序加载,前一个库加载完成后再加载下一个库。使用 @require
指令可以方便地引入外部脚本或库文件,扩展脚本的功能和灵活性。请注意,在使用 @require
指令引入外部资源时,确保资源的可用性和合法性,以避免安全风险和依赖问题。
🔔注意事项🔔
:
@require
中指定任何需要的外部资源,如其他 JavaScript 库、CSS 文件等。这些资源可以是通过 URL 引用的,通常是通过 CDN 或者其他网络地址。@require
中指定具体的版本号,以确保脚本始终使用相同版本的外部资源,避免由于资源更新导致的不兼容问题。
@resource
注释用于预加载外部资源并将其嵌入到脚本中。常见的资源类型包括CSS文件、图像、JSON文件等。预加载这些资源可以使脚本在运行时更高效,并且可以在没有网络连接的情况下使用这些资源。
加载外部资源:
@resource
注释来指定资源的名称和URL。// @resource customCSS https://example.com/style.css
// @resource logo https://example.com/logo.png
GM_getResourceURL
或 GM_getResourceText
函数来获取资源的内容或URL。const cssURL = GM_getResourceURL('customCSS');
const logoURL = GM_getResourceURL('logo');
const cssText = GM_getResourceText('customCSS');
🌰完整示例🌰
下面是一个包含 @resource
注释的完整油猴脚本示例,它预加载了一个CSS文件和一个图像,并在页面上应用这些资源:
// ==UserScript==
// @name My Resource Tampermonkey Script
// @namespace http://tampermonkey.net/
// @version 1.0.0
// @description A script that uses preloaded resources.
// @author John Doe
// @match https://*.example.com/*
// @grant GM_getResourceURL
// @grant GM_getResourceText
// @grant GM_addStyle
// @resource customCSS https://example.com/style.css
// @resource logo https://example.com/logo.png
// ==/UserScript==
(function() {
'use strict';
// 加载并应用预加载的CSS
const cssText = GM_getResourceText('customCSS');
GM_addStyle(cssText);
// 加载并添加预加载的图像
const logoURL = GM_getResourceURL('logo');
const img = document.createElement('img');
img.src = logoURL;
document.body.appendChild(img);
})();
🔔注意事项🔔
@resource
注释中的资源名称应该是唯一的,避免与其他资源冲突。通过使用 @resource
注释,你可以在油猴脚本中预加载和嵌入外部资源,从而提高脚本的效率和自给自足能力。
在这一章中,我们主要学习了油猴脚本常见的头部的注释/注解的含义和用法,在下一章,我们节开始介绍油猴常见的API,讲述如何编写脚本。
油猴
提供了一组丰富的API,用于开发和管理用户脚本。这些API可以帮助脚本与页面交互、修改页面内容、访问外部资源等。
下面简单介绍一下grant指令那里可以填写的一些权限,详情请查看油猴脚本文档。这里就简单介绍几个常用的,可以调用的函数全部以GM_作为开头。
GM_
前缀代表 "Greasemonkey",这是一种用于用户脚本的 API 标准。
以下是一些常用的油猴 API:
GM_log
: 输出调试信息到控制台,类似于console.log。
GM_info
: 返回当前脚本的元数据信息,如脚本名称、版本号等。
var scriptInfo = GM_info.script;
GM_setValue
和 GM_getValue
: 用于在用户脚本之间存储和获取持久化数据。
// 存储值
GM_setValue('myKey', 'myValue');
// 获取值
const value = GM_getValue('myKey');
GM_log('Stored value:', value);
GM_deleteValue
和 GM_listValues
:删除存储的数据和列出所有存储的键。
// 删除值
GM_deleteValue('myKey');
// 列出所有键
const keys = GM_listValues();
console.log('Stored keys:', keys);
GM_addStyle
: 用于动态添加样式规则到页面中。
GM_addStyle(`
body {
background-color: #f0f0f0;
}
`);
GM_xmlhttpRequest
: 用于发送跨域的 XMLHTTPRequest 请求。
GM_xmlhttpRequest({
method: 'GET',
url: 'https://api.example.com/data',
onload: function(response) {
console.log(response.responseText);
},
onerror: function(error) {
console.error('Request failed:', error);
}
});
GM_registerMenuCommand
: 用于在油猴菜单中添加自定义命令。
GM_registerMenuCommand('Show Alert', function() {
alert('Hello, world!');
});
GM_openInTab
: 用于在新标签页或新窗口中打开指定的 URL。
GM_openInTab('https://example.com', { active: true });
GM_notification
: 用于显示桌面通知。
GM_notification({
text: 'This is a notification',
title: 'Notification Title',
timeout: 4000
});
GM_setClipboard
: 用于将文本复制到剪贴板。
// 设置一个固定文本到剪贴板中
GM_setClipboard("Hello, world!");
// 使用变量设置剪贴板内容
var data = "This is the data I want to copy.";
GM_setClipboard(data);
除了上述 API,油猴还提供了许多其他功能和方法,用于处理网页事件、修改页面内容、获取页面信息等。你可以根据具体需求查阅油猴的官方文档以获取更详细的信息。
下面是两个也算比较常用的,不以GM_开头的API。
unsafeWindow
:
unsafeWindow
需要注意安全性。window
:
window
对象,同样适用于油猴脚本。以下是按功能分类的 GM_*
API 和其他相关的用户脚本 API,细化了每个分类及其主要用途:
🛠️WEB请求类🛠️:
GM_xmlhttpRequest(details)
GM_webRequest(rules, listener)
🛠️Cookie操作🛠️:
GM_cookie.list(details[, callback])
GM_cookie.set(details[, callback])
GM_cookie.delete(details, callback)
🛠️Tab选项卡操作🛠️:
GM_getTab(callback)
GM_saveTab(tab)
GM_getTabs(callback)
🛠️键值对操作🛠️:
GM_setValue(key, value)
GM_getValue(key, defaultValue)
GM_deleteValue(key)
GM_listValues()
GM_addValueChangeListener(key, (key, old_value, new_value, remote) => void)
GM_removeValueChangeListener(listenerId)
🛠️修改DOM🛠️:
GM_addElement(tag_name, attributes)
GM_addElement(parent_node, tag_name, attributes)
🛠️添加样式🛠️:
GM_addStyle(css)
🛠️下载🛠️:
GM_download(details)
GM_download(url, name)
🛠️获取@resource引入的资源文件🛠️:
GM_getResourceText(name)
GM_getResourceURL(name)
🛠️控制台打印🛠️:
GM_log(message)
🛠️屏幕通知🛠️:
GM_notification(details, ondone)
GM_notification(text, title, image, onclick)
🛠️打开新选项卡🛠️:
GM_openInTab(url, options)
GM_openInTab(url, loadInBackground)
🛠️菜单注册和注销🛠️:
GM_registerMenuCommand(name, callback, accessKey)
GM_unregisterMenuCommand(menuCmdId)
🛠️设置剪切板🛠️:
GM_setClipboard(data, info)
🛠️Windows窗体操作🛠️:
window.onurlchange
window.close()
window.focus()
🛠️执行页面上的Window🛠️:
unsafeWindow
🛠️计算对比引入文件的hash值(Subresource Integrity)🛠️:
Subresource Integrity
有时候我们想要使用外部编辑器编辑js脚本,此时可以在油猴插件中添加下面的脚本内容,引用外部实际的脚本文件路径 注意match、run-at、grant等属性从引用的实际脚本内容中复制。 另外需要在浏览器中开启油猴插件的允许访问文件网址。
// ==UserScript==
// @name 测试
// @description 通过这种方式,可以使用外部编辑器修改js文件。
// @version 1.0.0
// @match https://*.yourwebsite.com/*
// @require file://E:\path\to\your\test.user.js
// ==/UserScript==
可以去去
油猴中文网
看看或学习,里面有很多的参考素材。
下面我们编写一个简单的油猴脚本,打开掘金的文章,可以自己编辑,利用document.body.contentEditable = true;
// ==UserScript==
// @name Make Juejin Articles Editable
// @namespace http://tampermonkey.net/
// @version 0.1
// @description Make articles on Juejin editable
// @author Your Name
// @match https://juejin.cn/*
// @run-at document-end
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Wait for the DOM to fully load
window.addEventListener('load', function() {
// Select the main content area of the Juejin article
let articleBody = document.querySelector('#article-root'); // Adjust the selector as needed
if (articleBody) {
articleBody.contentEditable = 'true';
}
});
})();
这个需求比较简单,后面会参考一些比较热门的油猴脚本,根据具体的需求,实现相应的油猴脚本编写。
Tampermonkey油猴脚本编写快速入门
Chrome插件与油猴脚本
欢迎大家访问我们的刷题网站(https://fe.ecool.fun/)或者小程序 前端面试题宝典 进行刷题,1200多道全网最全的前端面试题,让你一网打尽。近期还有会员卡免费领,全场打折的活动不容错过!刷题会员周卡免费送
有会员购买、辅导咨询的小伙伴,可以通过下面的二维码,联系我们的小助手。