油猴脚本编写
简介
油猴可以方便的用自定义js内嵌到网页中。支持多种浏览器。
用户脚本是什么?
用户脚本是一段代码,它们能够优化您的网页浏览体验。安装之后,有些脚本能为网站添加新的功能,有些能使网站的界面更加易用,有些则能隐藏网站上烦人的部分内容。在 Greasy Fork 上的用户脚本都是由用户编写并向全世界发表的,您可以免费安装,轻松体验。
文档: https://www.tampermonkey.net/documentation.php
例子
消除浏览器的警告弹窗(alert)
-
需求: 在一个刷课网页上,当页面时间达到一定时间后,会弹出
confirm()
和alert()
弹窗,保证没有挂机行为。 -
思路: 使用js劫持,重写
confirm()
和alert()
函数
步骤
- 新建用户脚本
- 进行重写
alert()
和confirm()
函数
// ==UserScript==
// @name MYTEST
// @namespace http://tampermonkey.net/
// @version 0.1
// @description try to take over the world!
// @author You
// @match http://xxxx/*
// @run-at document-start
// @grant none
// ==/UserScript==
(function() {
'USE SCRIPTS';
window.confirm = function(s) {
return true;
};
window.alert = function(s) {
console.log(s);
}
})();
说明: 第8行的document-start
保证脚本在网页加载之前运行,这样可以覆盖掉网页本身的confirm()
和alert()
函数。
==UserScript== 与 ==/UserScript== 之间的内容是元注释,写给油猴插件看的,常用的标签:
name 脚本名字
namespace 命名空间,一般用你的域名就好
version 版本,每次检查更新,版本变化了才会真正更新脚本
match 指在什么网站生效,可以使用 * 通配符
include 同 match
exclude 排除的网站
icon 脚本图标,可以是 url 或 base64
require 依赖的资源,可以加载 cdn 的库。比如我需要加载 otplib 的库,总不能把源代码拷一份在脚本里吧。
run-at 脚本运行的时机:
document-start 尽早执行;
document-body 有 body 标签时执行;
document-end 网页加载完(DOMContentLoaded);
document-idle 在 DOMContentLoaded 之后执行,这是默认值;
context-menu 只 Chrome 系浏览器有效,在右键菜单时执行
grant 是申请的权限,可以有多个,值是需要使用的函数的方法
常用需要声明权限的方法有:
// @grant GM_getValue //获取保存的值
// @grant GM_setValue //保存设置项
// @grant GM_openInTab //在新标签页打开
// @grant GM_xmlhttpRequest //ajax 请求,声明这个权限才能跨域
// @grant GM_setClipboard //访问剪切板
// @grant GM_registerMenuCommand //在插件图标上注册一个菜单
// @grant unsafeWindow //访问全局的 window 对象,不声明的话访问的 window 其实是沙盒 window 并不能影响全局
一般的js函数劫持:
(function(){
var _alert = alert;
windows.alert = function(s){
// 劫持代码
_alert(s);
// ...
}
})();