firefox油猴脚本编写.md

油猴脚本编写

简介

油猴可以方便的用自定义js内嵌到网页中。支持多种浏览器。

用户脚本是什么?

用户脚本是一段代码,它们能够优化您的网页浏览体验。安装之后,有些脚本能为网站添加新的功能,有些能使网站的界面更加易用,有些则能隐藏网站上烦人的部分内容。在 Greasy Fork 上的用户脚本都是由用户编写并向全世界发表的,您可以免费安装,轻松体验。

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

例子

消除浏览器的警告弹窗(alert)

  • 需求: 在一个刷课网页上,当页面时间达到一定时间后,会弹出confirm()alert()弹窗,保证没有挂机行为。

  • 思路: 使用js劫持,重写confirm()alert()函数

步骤

  1. 新建用户脚本image-20210220112543953

image-20210220112643813

  1. 进行重写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);
// ...
}
})();

本文作者:nsfoxer

本文链接:https://www.cnblogs.com/nsfoxer/p/16321415.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   nsfoxer  阅读(305)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起