浏览器系列--油猴脚本写法

其他网址

简单的油猴脚本编写教程 - 『精品软件区』 - 吾爱破解
油猴脚本编写教程_过了即是客-CSDN博客

油猴和暴力猴区别

其他网址

油猴和暴力猴有什么区别? - 知乎

简介

一共有三种猴子:Tampermonkey、Greasemonkey、Violentmonkey。

Tampermonkey Greasemonkey Violentmonkey
API数目 很全。比GM多很多 很少 有TM和GM的所有API
兼容性 很好。 很差 很好。但有的TM
用户数 最多。数十/百倍于 VM 最少 较少。
来源 国外 国外 国内

详述

API

        Tampermonkey 上有两个常用的函数 GM_setValue() 和 GM_getValue(),均为同步函数;而到了 Greasemonkey 上变成了 GM.setValue() 和 GM.getValue(),均为异步函数。总而言之,一旦你在脚本里用上任意一套中的函数,Tampermonkey 和 Greasemonkey 就互不兼容了,而 Violentmonkey 则很狡猾地支持这四个函数,完美。

        是故有些脚本作者为了兼容性,干脆不用脚本管理器的数据存储功能,直接给你存到 localStorage 或者 Cookie 里面;但这样弊端很大,一是对用户不透明有潜在风险,二是数据跨脚本,我对这种做法表示强烈的反对。

        如前面所说的,Violentmonkey 也不是万能的。像 GM_info.script.author 这样的字段,Violentmonkey 也是获取不到的;Greasemonkey 就更不用说了,相比 Tampermonkey 整个 GM_info 都是残废的。

        简而言之,如果你写过用户脚本,肯定会明白 Tampermonkey 那一套 API 用起来是多么舒服。唯一的缺点就是不支持 GM. 开头的一堆异步函数,但影响并不是很大,大不了你自己在外面套一层异步就好了嘛。

扫描二维码关注公众号,回复: 12807687 查看本文章

对用户来说,主要就是要考虑网上下载到的脚本的兼容问题:

  1. Greasemonkey 该进垃圾堆了。
  2. Violentmonkey 理论兼容性最好,但实际上运行部分基于 Tampermonkey 的脚本会出问题。关键在于 Tampermonkey 的用户基数是最大的,数十、甚至上百倍于 Violentmonkey,这样看来 Violentmonkey 不兼容的脚本反而可能比 Tampermonkey 多。而且,管理界面太丑,ICON 更丑,不能忍。不过支持搜索支持当前页面的脚本,对小白来说大概挺好用的吧?
  3. Tampermonkey 是目前绝对的霸主(从用户基数的角度来说,Greasymonkey 貌似甚至没有 Chromium 版本,就别碰瓷了),好像没有什么不选择的理由。

元数据

其他网址

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

简介

元数据块是描述脚本的一个用户脚本部分。它通常包含脚本名称,命名空间,描述和包含和排除规则。元数据块出现在JavaScript行注释中,可能会出现在脚本内的任何位置, 但通常靠近文件的顶部。

元数据块必须遵循以下格式:

// ==UserScript==
// @key value
// ==/UserScript==

元数据大全

备注

示例

@name

脚本的名称。该项将显示在页面的标题以及链接内容,必填项

// @name  脚本名称

@namespace

@namespace 及 @name 这两个属性将帮助用户脚本管理器判断是否已安装该脚本。

 

@description

脚本功能的描述,显示在脚本标题下面,必填项

// @description  脚本功能描述

@version

脚本的版本标记将使用 Mozilla 版本格式 并显示于脚本的简介页面,必填项

// @version  0.0.1

@author 作者  

@match

@include
@exclude

描述脚本将执行的页面。该列表会被分析并展示到脚本的简介页面,以及用于脚本分类。

推荐用@match,其正则表达式见:Match patterns - Chrome Developers

// @match  *://www.52pojie.cn/*

// @match   *://*/*

这样写不行:// @match   *

@require

引用外部脚本到您的脚本

// @require http://cdn.bootcss.com/jquery.min.js

@run-at 在何时运行。 // @run-at      document-start

@resource

预加载的资源(GM_getResourceURL 和 GM_getResourceText用到的)  

@connect

定义了域/子域,可以被GM_xmlhttpRequest获取。  

@updateURL
@installURL,

@downloadURL

告知用户脚本管理器应该在哪个地址获取脚本更新。

 

@license

脚本所使用的许可协议名称或地址,该协议需包含用户是否允许二次分发或修改  脚本的权利。不提供许可协议则表示用户仅允许个人使用且不得二次分发;该协  议将在脚本的简介页面显示。

 

@supportURL

用户可获得该脚本技术支持的链接地址 (如:错误反馈系统、论坛、电子邮件),该链接将显示在脚本的反馈页面。

 

@contributionURL

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

 

@contributionAmount

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

 

@compatible

标记此脚本与某个浏览器兼容,兼容性信息将显示在脚本的简介页面上。

 

@incompatible

标记此脚本与某个浏览器不兼容,兼容性信息将显示在脚本的简介页面上。

 

@grant

将这些加入白名单:GM_* 功能, unsafeWindow 对象和一些强大的 window 功能。如果不使用这个标签,默认如下:

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

 

@antifeature

表示是否通过此脚本赚钱。  

@noframes

脚本运行于主页,但不在iframes  

@nocompat

用于关闭写在GM上的脚本的优化。  

@homepage

@homepageURL

@website

@source

与本脚本的名字相关联的主页。

注意:如果@namespace的tag是“http://”开头的,它的内容也会被用到这里。

 

@icon

@iconURL

@defaulticon

   

@icon64

@icon64URL

   

在生成脚本时,默认是这样的

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        http://*/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // Your code here...
})();

编程接口

其他网址

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

大全 

unsafeWindow

Subresource Integrity

GM_addStyle(css)

GM_addElement(tag_name, attributes),GM_addElement(parent_node, tag_name, attributes)

GM_deleteValue(name)GM_listValues()

GM_addValueChangeListener(name, function(name, old_value, new_value, remote) {})

GM_removeValueChangeListener(listener_id)

GM_setValue(name, value)

GM_getValue(name, defaultValue)

GM_log(message)

GM_getResourceText(name)

GM_getResourceURL(name)

GM_registerMenuCommand(name, fn, accessKey)

GM_unregisterMenuCommand(menuCmdId)

GM_openInTab(url, options), GM_openInTab(url, loadInBackground)

GM_xmlhttpRequest(details)

GM_download(details), GM_download(url, name)

GM_getTab(callback)GM_saveTab(tab)

GM_getTabs(callback)

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

GM_setClipboard(data, info)

GM_info

<><![CDATA[your_text_here]]></>

调试脚本

        编写脚本很难一次成功,大部分时间都花在了调试上面。调试油猴脚本的话有几种调试方法。

        第一种方法就是最原始的打印日志,可以利用console.log和GM_log来将关键信息打印出来,上面的脚本就是我靠打印日志一点点发现各种参数错误的。说实话这种办法有点笨。

        第二种就是利用浏览器的调试功能,在脚本需要调试的地方插入debugger;语句,然后在打开F12开发者工具的情况下刷新页面,就会发现网页已经暂停在相应位置上。这样就可以利用F12开发者工具进行单步调试、监视变量等操作了。

延时函数

其他网址

油猴脚本编写规则_Senreme-CSDN博客

猜你喜欢

转载自blog.csdn.net/feiying0canglang/article/details/114235964