标明:本文出现的TM 即使Tampermonkey 的缩写
目录
@homepage, @homepageURL, @website and @source
@icon, @iconURL and @defaulticon
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_notification(details, ondone), GM_notification(text, title, image, onclick)
脚本的名字
脚本的命名空间
脚本的版本,用于检查更新。
脚本的作者
简短重要的描述
在“选项”页上用于从脚本名链接到给定页的作者主页。请注意,如果@namespace标记以“http://”开头,则其内容也将用于此操作。
低分率的脚本会在脚本管理列表上显示
脚本icon 64*64 如果给了这个标签,但给了图标,则图标图像将在选项页的某些位置缩放
更新脚本的地址,注意:只有存在@version标签才会去更新
定义检测到更新时将从中下载脚本的URL。如果值为none,则不会执行更新检查。
定义使用者报告issues和个人支持的地址
脚本应该运行的页面, 可以使用正则匹配。 允许多个标签
请注意@include不支持url hash参数,可以访问这里获取更多的信息点击获取更多信息
示例
// @include http://www.tampermonkey.net/*
// @include http://*
// @include https://*
// @include *
和@include标签差不多的意思, 你可以点击这里获取更多信息
注意: 尚不支持“<all-urls>”语句,scheme部分也接受“http*://”。
允许多个标记实例。
排除URL,即使它们包含在@include或@match中 。 允许多个标签
指向一个脚本文件,会在本脚本运行前加载并执行
注意:通过@require加载的脚本及其“use strict”语句可能会影响用户脚本的strict模式!
示例:
// @require https://code.jquery.com/jquery-2.1.4.min.js
// @require https://code.jquery.com/jquery-2.1.3.min.js#sha256=23456...
// @require https://code.jquery.com/jquery-2.1.2.min.js#md5=34567...,sha256=6789...
有关如何确保完整性的详细信息,请查看子资源完整性部分。允许多个标记实例。
预加载可以通过脚本通过gm_getresourceurl和gm_getresourcetext访问的资源
示例
// @resource icon1 http://www.tampermonkey.net/favicon.ico
// @resource icon2 /images/icon.png
// @resource html http://www.tampermonkey.net/index.html
// @resource xml http://www.tampermonkey.net/crx/tampermonkey.xml
// @resource SRIsecured1 http://www.tampermonkey.net/favicon.ico#md5=123434...
// @resource SRIsecured2 // http://www.tampermonkey.net/favicon.ico#md5=123434...;sha256=234234...
有关如何确保完整性的详细信息,请查看“子资源完整性”部分。允许多个标记实例。
此标记定义域(没有顶级域),包括允许由GM_xmlhttpRequest 检索的子域
示例
// @connect <value>
<value>可以是以下几个值
如果无法声明用户脚本可能连接到的所有域,则最好执行以下操作:
声明所有已知或至少所有可能由脚本连接的公共域。这样,大多数用户都可以避免确认对话框。
另外在脚本中添加“@connect*”。通过这样做,tampermonkey仍然会询问用户是否允许下一个连接到未提及的域,但也会提供一个“总是允许所有域”按钮。如果用户单击此按钮,则将自动允许所有未来的请求。
用户还可以通过在“脚本设置”选项卡的用户域白名单中添加“*”来白名单所有请求。
注意:
初始url和最终的url都会被检查, 为了向后兼容scriptish@domain标记也会被解释。
允许多个标记实例。
定义脚本被注入的时间,与其他脚本处理相反,@run-at 定义了脚本要运行的第一可能时间。
这意味着,使用@require标记的脚本可能会在文档已加载后执行,因为获取所需脚本花费了很长时间。无论如何,在给定的注入时刻之后发生的所有domnodeinserted和domcontentloaded事件都将被缓存,并在注入时传递给脚本。
全部示例:
// @run-at document-start // 脚本会被尽可能快地注入
// @run-at document-body // 当body元素存在是被注入
// @run-at document-end // 当DOMContentLoaded事件被触发时或者之后注入
// @run-at document-idle // 当DOMContentLoaded事件被触发后被注入 如果没有@run-at标签也是在此时注入
// @run-at context-menu // 当点击浏览器上下文菜单时被注入(仅仅是桌面Chrome-based浏览器)
// 注意:如果使用了context-menu @include和@exclude的变量都将被忽略,但是未来可能会改变
@grant被用于设置GM_*函数的白名单, GM_*function 是一些unsafeWindow对象和一些有影响的window函数,如果没有@grant标签,TM会猜测脚本需要什么
示例:
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_setClipboard
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
由于关闭和聚焦选项卡是一个强大的功能,因此还需要将其添加到@grant语句中。
如果@grant后跟“none”,沙盒将被禁用,脚本将直接在页面上下文中运行。在此模式下,没有gm_u*函数,但gm_u info属性将可用。
示例
// @grant none
这个标签表明脚本在主页面上运行,而不是在iframes里
这个标签是被忽略的,因为他在谷歌浏览器里不需要
目前,tm试图通过查找@match标记来检测脚本是否是在google chrome/chromium的知识中编写的,但并不是每个脚本都使用它。这就是为什么tm支持这个标签来禁用运行为firefox/greasemonkey编写的脚本所需的所有优化。要保持此标记可扩展,可以添加可由脚本处理的浏览器名称。
示例
// @nocompat Chrome
unsafeWindow 对象提供权限访问页面的js函数和变量
可以使用@resource和@require标记的url的散列组件来实现此目的。
示例:
// @resource SRIsecured1 http://www.tampermonkey.net/favicon1.ico#md5=ad34bb...
// @resource SRIsecured2 http://www.tampermonkey.net/favicon2.ico#md5=ac3434...,sha256=23fd34...
// @require https://code.jquery.com/jquery-2.1.1.min.js#md5=45eef...
// @require https://code.jquery.com/jquery-2.1.2.min.js#md5=ac56d...,sha256=6e789...
TM本机支持MD5哈希作为回退,所有其他(SHA-1、SHA-256、SHA-384和SHA-512)都依赖于window.crypto。如果给定了多个散列(用逗号或分号分隔),则TM将使用当前支持的最后一个散列。如果外部资源的内容与所选哈希不匹配,则资源不会传递到用户脚本。所有散列都需要以十六进制或base64格式编码。
给document添加样式,并且返回注入的节点
删除‘name’ 从storage里
列出storage中的所有name
在storage里添加一个改变事件的监听,并返回监听id
‘name’是被观察的变量
回调函数的‘remote’变量是显示此值是从另一个选项卡的实例修改的(true)还是在此脚本实例中修改的(false)。
因此,不同浏览器选项卡的脚本可以使用此功能相互通信。
可以使用此API实现不同浏览器Tab的相互通讯
通过监听器的id移除一个监听改变的事件
设置‘name‘ 的值到storage中
从storage中获取‘name’的值
在控制台打印日志
获取在脚本顶部预定的@resource标签的内容
获取在脚本顶部定义的@resource标签的base64 encodeURI
注册一个能在页面上能够显示TM菜单命令,当这个脚本执行是,并且返回菜单命令id
意思就是可以注册一个直接显示TM的菜单的ming
取消注册一个菜单命令根据菜单命令ID(通过GM_registerMenuCommand 提供的)
使用参数url打开一个新的tab,options可以是以下值
另外,新的选项卡将被添加。loadinbackground具有与active相反的含义,并被添加以实现Greasemonkey 3.x兼容性。如果未指定“活动”或“加载后台”,则选项卡将不会聚焦。此函数返回一个具有函数close、侦听器onclosed和一个名为closed的标志的对象。
创建一个xmlHttpRequest. 参数details 的属性有:
返回的对象包含以下属性
注意: 属性synchronous 不支持 Important: 如果你想使用这个方法请移步@connectb标签 查看更多信息
使用下载资源到本地磁盘 details的属性:
现在文件中 onerror 的参数如下:
返回一个对象包含以下属性
根据下载模式,gm_u info提供一个名为download mode的属性,该属性设置为以下值之一:native、disabled或browser。
获取一个持久对象,只要该选项卡处于打开状态.
保存tab对象为了重新打开,在页面关闭后
获取所有tab对象作为散列与其他脚本实例通信。
显示一个H5的桌面通知,或者高亮当前tab details 的属性:
所有参数的作用与其对应的详细信息属性挂件完全相同。
复制数据到粘贴板,参数info可以是对象如{type: 'text', mimetype: 'text/plain'},或者是一个字符串 text, html
获取一些脚本和TM的信息,数据结构如下
Object+
---> script: Object+
------> author: ""
------>copyright: "2012+, You"
------>description: "enter something useful"
------>excludes: Array[0]
------>homepage: null
------>icon: null
------>icon64: null
------>includes: Array[2]
------>lastUpdated: 1338465932430
------>matches: Array[2]
------>downloadMode: 'browser'
------>name: "Local File Test"
------>namespace: "http://use.i.E.your.homepage/"
------>options: Object+
--------->awareOfChrome: true
--------->compat_arrayleft: false
--------->compat_foreach: false
--------->compat_forvarin: false
--------->compat_metadata: false
--------->compat_prototypes: false
--------->compat_uW_gmonkey: false
--------->noframes: false
--------->override: Object+
------------>excludes: false
------------>includes: false
------------>orig_excludes: Array[0]
------------>orig_includes: Array[2]
------------>use_excludes: Array[0]
------------>use_includes: Array[0]
--------->run_at: "document-end"
------>position: 1
------>resources: Array[0]
------>run-at: "document-end"
------>system: false
------>unwrap: false
------>version: "0.1"
---> scriptMetaStr: undefined
---> scriptSource: "// ==UserScript==\n// @name Local File Test\n ...."
---> scriptUpdateURL: undefined
---> scriptWillUpdate: false
---> scriptHandler: "Tampermonkey"
---> isIncognito: false
---> version: "4.0.25"
tampermonkey支持这种存储元数据的方式。TM尝试自动检测脚本是否需要启用此兼容性选项。