原文网址:油猴--介绍/用法_IT利刃出鞘的博客-CSDN博客
简介
说明
本文介绍油猴基础内容。
官网
油猴和暴力猴区别
简介
一共有三种猴子:Tampermonkey、Greasemonkey、Violentmonkey。
项 | Tampermonkey | Greasemonkey | Violentmonkey |
API数目 | 很全。比GM多很多 | 很少 | 有TM和GM的所有API |
兼容性 | 很好。 | 很差 | 很好。但有的TM |
用户数 | 最多。数十/百倍于 VM | 最少 | 较少。 |
来源 | 国外 | 国外 | 国内 |
详述
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. 开头的一堆异步函数,但影响并不是很大,大不了你自己在外面套一层异步就好了嘛。
对用户来说,主要就是要考虑网上下载到的脚本的兼容问题:
- Greasemonkey 该进垃圾堆了。
- Violentmonkey 理论兼容性最好,但实际上运行部分基于 Tampermonkey 的脚本会出问题。关键在于 Tampermonkey 的用户基数是最大的,数十、甚至上百倍于 Violentmonkey,这样看来 Violentmonkey 不兼容的脚本反而可能比 Tampermonkey 多。而且,管理界面太丑,ICON 更丑,不能忍。不过支持搜索支持当前页面的脚本,对小白来说大概挺好用的吧?
- Tampermonkey 是目前绝对的霸主(从用户基数的角度来说,Greasymonkey 貌似甚至没有 Chromium 版本,就别碰瓷了),好像没有什么不选择的理由。
元数据
其他网址
简介
元数据块是描述脚本的一个用户脚本部分。它通常包含脚本名称,命名空间,描述和包含和排除规则。元数据块出现在JavaScript行注释中,可能会出现在脚本内的任何位置, 但通常靠近文件的顶部。
元数据块必须遵循以下格式:
// ==UserScript==
// @key value
// ==/UserScript==
元数据大全
键 | 备注 | 示例 |
脚本的名称。该项将显示在页面的标题以及链接内容,必填项。 | // @name 脚本名称 | |
@namespace 及 @name 这两个属性将帮助用户脚本管理器判断是否已安装该脚本。 | ||
脚本功能的描述,显示在脚本标题下面,必填项。 | // @description 脚本功能描述 | |
脚本的版本标记将使用 Mozilla 版本格式 并显示于脚本的简介页面,必填项。 | // @version 0.0.1 | |
作者 | ||
描述脚本将执行的页面。该列表会被分析并展示到脚本的简介页面,以及用于脚本分类。 推荐用@match,其正则表达式见:Match patterns - Chrome Developers | // @match *://www.52pojie.cn/* // @match *://*/* 这样写不行:// @match * | |
引用外部脚本到您的脚本 | // @require http://cdn.bootcss.com/jquery.min.js | |
预加载的资源(GM_getResourceURL 和 GM_getResourceText用到的) | ||
在何时运行。 | // @run-at document-start | |
定义了域/子域,可以被GM_xmlhttpRequest获取。 | ||
在哪个地址获取脚本更新/下载脚本 | ||
该脚本技术支持的链接地址 (如:错误反馈系统、论坛、电子邮件),该链接将显示在脚本的反馈页面。 | ||
将这些加入白名单:GM_* 功能, unsafeWindow 对象和一些强大的 window 功能。如果不使用这个标签,默认如下: // @grant GM_setValue | ||
表示是否通过此脚本赚钱。 | ||
脚本运行于主页,但不在iframes | ||
用于关闭写在GM上的脚本的优化。 | ||
脚本相关联的主页。 注意:若@namespace的tag是“http://”开头的,它的内容也会被用到这里。 | ||
图标 | ||
图标 | ||
@license | 脚本所使用的许可协议名称或地址,该协议需包含用户是否允许二次分发或修改 脚本的权利。不提供许可协议则表示用户仅允许个人使用且不得二次分发;该协 议将在脚本的简介页面显示。 | |
@contributionURL | 用于捐赠脚本作者的链接,该链接将显示在脚本的反馈页面。 | |
@contributionAmount | 建议捐赠金额,请配合 @contributionURL 使用。 | |
@compatible | 标记此脚本与某个浏览器兼容,兼容性信息将显示在脚本的简介页面上。 | |
@incompatible | 标记此脚本与某个浏览器不兼容,兼容性信息将显示在脚本的简介页面上。 |
在生成脚本时,默认是这样的
// ==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...
})();
编程接口
其他网址
大全
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_getValue(name, defaultValue)
GM_registerMenuCommand(name, fn, accessKey)
GM_unregisterMenuCommand(menuCmdId)
GM_openInTab(url, options), GM_openInTab(url, loadInBackground)
GM_download(details), GM_download(url, name)
GM_getTab(callback)GM_saveTab(tab)
GM_notification(details, ondone), GM_notification(text, title, image, onclick)
<><![CDATA[your_text_here]]></>
调试脚本
编写脚本很难一次成功,大部分时间都花在了调试上面。调试油猴脚本的话有几种调试方法。
第一种方法就是最原始的打印日志,可以利用console.log和GM_log来将关键信息打印出来,上面的脚本就是我靠打印日志一点点发现各种参数错误的。说实话这种办法有点笨。
第二种就是利用浏览器的调试功能,在脚本需要调试的地方插入debugger;语句,然后在打开F12开发者工具的情况下刷新页面,就会发现网页已经暂停在相应位置上。这样就可以利用F12开发者工具进行单步调试、监视变量等操作了。
延时函数
其他网址