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);
        // ...
    }
})();
原文地址:https://www.cnblogs.com/nsfoxer/p/14420061.html