油猴篡改猴脚本开发文档和案例

news2024/12/16 11:33:06

油猴是网页浏览器的扩展,通过它可以在任何网页中注入 javascript 代码片段,从而实现自己的功能或修改原网页的功能和行为。

元注释

元注释是通过注释声明脚本的信息,油猴扩展根据元注释来提供相应的功能,例如声明脚本名称、版本、自动更新、引用外部库、申请 API 权限等。

@name

脚本的名称。

// @name    A test

@namespace

脚本的命名空间,脚本的唯一标识。当发不到共享平台例如 GreasyFork 如果不设置则自动生成唯一标识。

// @namespace    http://tampermonkey.net/

@version

脚本的版本号。

// @version      0.1

@description

脚本简介

// @description  try to take over the world!

@author

脚本的作者

// @author       YourName

@homepage

主页地址,油猴管理面板中点击主页按钮即可跳转到此地址。

// @homepage     http://tampermonkey.net

@copyright

版权声明显示在脚本编辑器的标题中,位于脚本名称的正下方;

@icon

脚本图标

// @icon         http://ccp.noc.net.cn/images/logo1.png

@match

用于指定脚本应在其上运行的网页。匹配脚本作用的URL,可使用 * 通配符。

// @match    <protocol>://<domain><path>
// @match    https://blog.csdn.net/*/article/details/*

@exclude

排除匹配的URL

// @exclude      *://ccp.noc.net.cn/Course/List*

@include

匹配包含的URL

// @include http://www.tampermonkey.net/*
// @include http://*
// @include https://*
// @include /^https:\/\/www\.tampermonkey\.net\/.*$/
// @include *

@require

引用第三方脚本

// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js

@resource

外部资源,可通过 GM_getResourceURL 访问并由脚本GM_getResourceText的资源。

// @resource icon1       http://www.tampermonkey.net/favicon.ico
// @resource icon2       /images/icon.png
// @resource html        http://www.tampermonkey.net/index.html
// @resource xml         http://www.tampermonkey.net/crx/tampermonkey.xml
// @resource SRIsecured1 http://www.tampermonkey.net/favicon.ico#md5=123434...
// @resource SRIsecured2 http://www.tampermonkey.net/favicon.ico#md5=123434...;sha256=234234...

@run-at

设置脚本运行时机,它的值可以是以下这些时机:

  • document-start: 在文档渲染前注入脚本;
  • document-end: 在调度 DOMContentLoaded 事件时或之后注入;
  • document-body: 如果 body 元素存在,则将注入脚本;
  • document-idle: 在调度 DOMContentLoaded 事件后注入。未设置 @run-at 标记则这是默认时机。
  • context-menu: 在浏览器上下文菜单中单击该脚本时注入该脚本;
// @run-at      document-start
// @run-at      document-end
// @run-at      document-body
// @run-at      document-idle
// @run-at      context-menu

@run-in

定义注入脚本的浏览器上下文的类型。此元键允许您控制脚本是否应该在正常浏览选项卡、隐身选项卡或两者中运行。这提供了基于浏览会话的隐私上下文确定脚本行为的灵活性。如果未指定 @run-in 标签,则脚本默认注入所有选项卡。

  • normal-tabs: 该脚本将仅注入到正常浏览选项卡(非隐身模式,默认容器)中;
  • incognito-tabs: 该脚本将仅在隐私模式浏览选项卡中注入,在 Firefox 中是所有不使用默认 cookie 的选项卡;
  • container-id-x: 该脚本将仅注入到指定ID属于指定容器的选项卡中,当脚本在所需的容器上下文中运行时,可以通过检查 GM_info.container 来找到容器 ID;
// @run-in normal-tabs
// @run-in incognito-tabs
// @run-in container-id-2
// @run-in container-id-3

@connect

设置允许 GM_xmlhttpRequest 访问的域名,确保此跨域请求是计划内的行为;

// @connect tmnk.net
// @connect www.tampermonkey.net
// @connect self
// @connect localhost
// @connect 8.8.8.8
// @connect *

@noframes

此标记使脚本在主页上运行,但不在 iframe 上运行。

@grant

申请敏感函数的运行权限,例如申请油猴提供的 GM_*unsafeWindow 等函数权限,相当于放在脚本 header 里面让油猴提供相应权限;@grant none 油猴会在 window 对象注入运行,这样的话就无法使用GM_* 等函数,无法使用一些更强的功能,因此一般是设为 unsafeWindow 申请油猴的一些更强的函数功能。

// @grant GM_setValue
// @grant GM_getValue
// @grant GM.setValue
// @grant GM.getValue
// @grant GM_setClipboard
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
// @grant window.onurlchange

@updateURL

检查用户脚本更新的 URL,注意需要 @version 标签才能使更新检查正常工作;

@downloadURL

定义检测到更新时下载脚本的 URL,如果使用值 none 则不会执行更新检查;

@supportURL

在脚本反馈页面显示的网址,用来提供支持或者问题反馈等作用;

@contributionURL

用于捐赠脚本作者的链接,该链接将显示在脚本的反馈页面。

@contributionAmount

建议捐赠金额,请配合 @contributionURL 使用。

应用程序接口

应用程序接口是油猴扩展为油猴脚本注入的对象,通过这些对象能够获得更强大的功能,比如异步 http 请求、原网页的全局对象、数据储存等。

unsafewindow

允许脚本可以完整访问原始页面,包括原始页面的脚本和变量。unsafewindow 是油猴提供的对象包含 window 对象和网页中更多数据,可以用它访问到原始网页中 JS 的变量。

// ==UserScript==
// @grant        unsafeWindow
// ==/UserScript==
(function() {
    'use strict';
    console.log(unsafeWindow.document.title);
})();

GM_getValue

从油猴扩展的存储中访问指定 key 值,在没成功获取到数据的时候可返回默认值。

GM_getValue(name, defaultvalue)

GM_setValue

在油猴扩展的存储中写入键值对。

GM_setValue(name, value)

GM_deleteValue

删除油猴扩展的存储中的键。

GM_deleteValue(name)

GM_listValues

获取油猴扩展的存储中的所有键返回列表。

GM_addValueChangeListener

监听油猴扩展的存储中的键,当值发生变化时回调函数。

const listener_id = GM_addValueChangeListener('hello',function(name, old_value, new_value, remote){
	// 回调函数
});

GM_removeValueChangeListener

移除油猴扩展的存储中的键监听器。

GM_removeValueChangeListener(listener_id)

GM_xmlhttprequest

异步请求数据。

GM_xmlhttpRequest({
    method: "GET",
    url: "http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp",
    onload: function(res) {
        if (res.status == 200) {
            var text = res.responseText;
        }
    }
});

GM_setclipboard

将数据复制到剪贴板中,第一个参数是要复制的数据,第二个参数是mime类型,用于指定复制的数据类型。

GM_setclipboard(data, info)

GM_log

用于在控制台中打印日志,也可以使用原生的 console.log(xxx); 打印日志。

GM_log("Hello World")

GM_addStyle

向网页中指定元素

GM_addStyle("* {margin-top:0px !important; margin-left:0px !important}");

向指定id的元素,以及含有指定样式的元素添加css样式。

GM_notification

设置网页通知或提示。

GM_notification(details, ondone)
GM_notification(text, title, image, onclick)

GM_registerMenuCommand

注册菜单命令,浏览器油猴插件展示脚本名称时,会携带此菜单,方便用户做一些设置,而不用手动修改脚本。

GM_registerMenuCommand("菜单1", () => {
    window.open("https://xxx.xxx.xxx/xxx", "_blank");
});

GM_openInTab

打开一个新的标签页面,类似 windown.open(url)。

GM_openInTab("https://www.baidu.com",{ active: true, setParent :true});
// active:true,新标签页获取页面焦点
// setParent :true:新标签页面关闭后,焦点重新回到源页面

应用示例

注入 CSS 样式

// ==UserScript==
// @resource css https://blog.icodef.com/wp-content/themes/Kratos-3.0.7/assets/css/kratos.min.css?ver=3.2.4
// ==/UserScript==

(function () {
    'use strict';
    console.log(GM_getResourceURL("css"),GM_getResourceText("css"));
    GM_addStyle(GM_getResourceText("css"));
    
    //相当于
    let script = document.createElement('link');
    script.setAttribute('rel', 'stylesheet');
    script.setAttribute('type', 'text/css');
    script.href = "https://blog.icodef.com/wp-content/themes/Kratos-3.0.7/assets/css/kratos.min.css?ver=3.2.4";
    document.documentElement.appendChild(script);
})();

劫持默认方法

(function () {
    'use strict';
    let hookSetInterval = window.setInterval;
    //替换原window.setInterval方法
    window.setInterval = function(a, b){
    	return hookSetInterval(a, 1000 * 10);
    }
})();

插入HTML元素

(function () {
    'use strict';
    let div = document.createElement("div");
    div.innerHTML = '<span>span1</span><span>span2</span>';
    document.body.append(div);
})();

引用外部 JS

(function () {
    'use strict';
    let script = document.createElement('script');
    script.setAttribute('type', 'text/javascript');
    script.src = "https://cdn.jsdelivr.net/npm/vue@2.6.12/dist/vue.min.js";
    document.documentElement.appendChild(script);
})();

或者在元注解中使用 @require 直接引入使用。

实践案例

案例:Bilibili 视频倍速

// ==UserScript==
// @name         BilibiliFastPlay
// @namespace    http://tampermonkey.net/
// @version      2024-12-11
// @description  Bilibili视频加速
// @author       Hileez
// @match        https://www.bilibili.com/*
// @icon         https://i0.hdslb.com/bfs/static/jinkela/long/images/favicon.ico
// @grant        none
// @require      http://libs.baidu.com/jquery/2.0.0/jquery.min.js
// @run-at       document-end
// ==/UserScript==

/* Bilibili视频加速 */
(function() {
    'use strict';
    let menuParent = null;
    const timer = setInterval(() => {
        menuParent = document.querySelector('.bpx-player-ctrl-playbackrate-menu');
        if (menuParent != null) {
            clearInterval(timer);
            addMenu(menuParent)
        }
    }, 1000);

    function addMenu(element) {
        for (let index = 2.5; index < 6; index += 0.5) {
            let li = document.createElement("li");
            li.className = 'bpx-player-ctrl-playbackrate-menu-item';
            li.innerText = `${index.toFixed(1)}x`;
            li.setAttribute('data-value', index)
            li.addEventListener('click', function() {
                document.querySelector('video').playbackRate = index
            })
            element.insertBefore(li, menuParent.firstChild);
        }
    }
})();

发布脚本

油猴官方支持好几个网站,其中最常用的是 GreasyFork ,纯中文按提示操作即可。右上角点击’登录’(可以使用github账号登陆)。新账号登陆后,需要过30分钟左右后才能正式发布脚本。登陆之后,点击用户名称进入控制台,选择’发布你编写的脚本’,最后添加内容即可。

  • @license 发布的脚本必须指定许可证;
  • @namespace 不写时会默认自动生成,这样油猴管理面版中点击主页按钮即可跳转到此地址;
  • @updateurl 不指定时也可以使用@homepage设置脚本更新地址;

参考文档

官方文档 https://www.tampermonkey.net/documentation.php

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2260469.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

人工智能系统

介绍人工智能 的基础书 点击这里 1.1 深度学习的历史&#xff0c;现状与发展 本章将介绍深度学习的由来&#xff0c;现状和趋势&#xff0c;让读者能够了解人工智能系统之上的深度学习负载的由来与趋势&#xff0c;为后面理解深度学习系统的设计和权衡形成初步的基础。我们在后…

康佳Android面试题及参考答案(多张原理图)

JVM 内存分布和分代回收机制是什么? JVM 内存主要分为以下几个区域。 堆(Heap)是 JVM 管理的最大的一块内存区域,主要用于存放对象实例。所有线程共享堆内存,在堆中又分为年轻代(Young Generation)和老年代(Old Generation)。年轻代又分为 Eden 区和两个 Survivor 区(…

(css)element中el-select下拉框整体样式修改

(css)element中el-select下拉框整体样式修改 重点代码&#xff08;颜色可行修改&#xff09; // 修改input默认值颜色 兼容其它主流浏览器 /deep/ input::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.50); } /deep/ input::-moz-input-placeholder {color: rgba…

论文概览 |《Sustainable Cities and Society》2024.12 Vol.116

本次给大家整理的是《Sustainable Cities and Society》杂志2024年12月第116期的论文的题目和摘要&#xff0c;一共包括52篇SCI论文&#xff01; 论文1 Enhancing road traffic flow in sustainable cities through transformer models: Advancements and challenges 通过变压…

【电源专题】开关转换器的三种过流保护方案

开关转换器内部集成功率开关,使限流保护成为基本功能。常用限流方案有三种:恒流限流、折返限流和打嗝模式限流。 恒流限流 对于恒流限流方案,当发生过载情况时,输出电流保持恒定值(ILIMIT)。因此,输出电压会下降。这种方案通过逐周期限流实现,利用流经功率开关的峰值电感…

网络与安全

文章目录 网络协议OSI七层模型TCP/IP协议族TCP协议UDP协议HTTP协议HTTPS协议 SocketSocket编程粘包与拆包 网络安全常见网络攻击及防护放火墙网络加密技术 跨域问题 网络协议 网络协议是计算机网络中设备和系统之间进行数据交换的规则和约定。它定义了数据的格式、传输方式、处…

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯推荐功能的实现

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯推荐功能的实现 前面的教程中已实现了启动页&#xff0c;登录页&#xff0c;注册页及首页的部分功能。这里有一些朋友提出问题&#xff0c;如何设置登录页面的背景图片。这里稍带说一个这个功能的实现。 一、登录页面的背景图片…

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…

【蓝桥杯每日一题】推导部分和——带权并查集

推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1​,A2​,⋯,AN​ &#xff0c;小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…

[代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。

前言 二叉树的题目还是要会一流程构造函数之类的。其中还有回溯的思想 题目链接 654. 最大二叉树 - 力扣&#xff08;LeetCode&#xff09; 一、最大二叉树 思路&#xff1a;还是考察构造二叉树&#xff0c;简单来说就是给你一个数组去构建一个二叉树&#xff0c;递归来解决就…

让 Win10 上网本 Debug 模式 QUDPSocket 信号槽 收发不丢包的方法总结

在前两篇文章里&#xff0c;我们探讨了不少UDP丢包的解决方案。经过几年的摸索测试&#xff0c;其实方法非常简单, 无需修改代码。 1. Windows 下设置UDP缓存 这个方法可以一劳永逸解决UDP的收发丢包问题&#xff0c;只要添加注册表项目并重启即可。即使用Qt的信号与槽&#…

水凝胶微机器人:复杂体内环境的“导航高手”

大家好&#xff01;今天来了解一项关于成像引导的生物可吸收声学水凝胶微型机器人&#xff08;BAM&#xff09;的研究——《Imaging-guided bioresorbable acoustic hydrogel microrobots》发表于《SCIENCE ROBOTICS》。这项研究为生物医学工程领域带来了新的突破&#xff0c;有…

噪杂环境(房车改装市场)离线语音通断器模块

一直在坚持&#xff0c;却很难有机会上热门&#xff0c;在现在这个以流量为导向的时代&#xff0c;貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主&#xff0c;应用场景主要是房车改装&#xff0c;根据九客户的需求定制化一些模块。因为没有…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61&#xff0c;否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61&#xff0c;否则可能有兼容性问题…

数据结构速成

1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树&#xff08;1&#xff09; 7. 树与二叉树&#xff08;2&#xff09; 8. 图 9. 图的应用 10. 查找 11. 排序&#xff08;1&#xff09; 12. 排序&#xff08;2&#xff09;

巅峰极客2024

Misc Misc题搞得有点像re病毒分析&#xff0c;不过misc成分还是比较高 源文件有upx壳&#xff0c;脱完了获得的程序沙箱跑不出来 IDA分析一下发现有虚拟机检测&#xff0c;所以只能在本地运行 运行后释放了两个文件 图片其实在释放程序中能找到 file文件上传沙箱后显示是木马…

gorm源码解析(二):核心设计与初始化

文章目录 前言基本使用初始化db实例定义model增删改查 数据结构gorm.DBStatementSchema元数据clone 初始化初始化DB初始化dialector用dialector初始化db注册crud函数执行器processor注册callback Clause抽象解析元数据解析schema解析field 总结 前言 上一篇文章介绍了什么是OR…

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…

CSS学习第二天

HTML文本颜色 颜色属性被用来设置文字的颜色&#xff0c;颜色通过css最经常的指定&#xff1a; #FF000&#xff1b;RGB&#xff08;255&#xff0c;0&#xff0c;0&#xff09;&#xff1b;颜色的名称red 一个网页的背景颜色是指在主体内的选择 文本的对齐方式 文本排列属性是…

springboot437校园悬赏任务平台(论文+源码)_kaic

摘 要 使用旧方法对校园悬赏任务平台的信息进行系统化管理已经不再让人们信赖了&#xff0c;把现在的网络信息技术运用在校园悬赏任务平台的管理上面可以解决许多信息管理上面的难题&#xff0c;比如处理数据时间很长&#xff0c;数据存在错误不能及时纠正等问题。这次开发的校…