Tampermonkey 参考
Tampermonkey 参考
官方文档
文本翻译并修改自 官方文档,请以官方文档为准。
1. 头信息
@name
脚本名称,可以通过后缀实现国际化。
// @name A test
// @name:de Ein Test
@namespace
命名空间,用于区分不同的脚本。
@copyright
版权声明,显示在脚本编辑器页眉的脚本名称下方。
@version
脚本版本号,用于更新检测,每次更新必须增加,并且使用语义化的版本号。
@description
脚本描述,可以通过后缀实现国际化。
@icon
低分辨率的脚本图标。也可以使用 @iconURL
、@defaulticon
。
@icon64
该脚本图标的像素为 64x64。如果给定了此标签,但未给定 @icon
,则 @icon
图像将在选项页面的某些地方按比例缩放。
@grant
@grant
用于授权 GM_*
和 GM.*
函数,还包括 unsafeWindow
对象和其他一些功能比较强的 window
函数。
// @grant GM_setValue
// @grant GM_getValue
// @grant GM.setValue
// @grant GM.getValue
// @grant GM_setClipboard
// @grant unsafeWindow
// @grant window.close
// @grant window.focus
// @grant window.onurlchange
由于关闭和聚焦标签页是比较强的功能,因此也需要在 @grant
语句中添加这项功能。如果 @grant
后跟的是 none
,则沙盒将被禁用。在这种模式下,GM_*
功能不可用,但 GM_info
仍然可用。
// @grant none
如果没有给出 @grant
标记,则假定列表为空。但这与使用 @grant none
不同。
@author
脚本作者。
2. API 接口
unsafeWindow
TS unsafeWindow: Window & typeof globalThis
unsafeWindow
对象提供了对 Tampermonkey 运行页面的 window
对象的访问权限,而不是 Tampermonkey 扩展的窗口对象。这在某些情况下非常有用,例如当用户脚本需要访问页面上定义的 JavaScript 库或变量时。
子资源整合
子资源整合(Subresource Integrity,SRI)是一项安全功能,可让用户脚本开发人员确保其用户脚本中包含的外部资源(如 JavaScript 库和 CSS 文件)未被篡改或修改。具体方法是生成资源的加密哈希值,并将其包含在 @require
和 @resource
标记中。安装用户脚本时,Tampermonkey 会计算资源的哈希值,并与包含的哈希值进行比较。如果两个哈希值不匹配,Tampermonkey 将拒绝加载资源,防止攻击者向用户脚本中注入恶意代码。
@resource
和 @require
标记的 URL 中的哈希标记的使用方法如下。
// @resource SRIsecured1 http://example.com/favicon1.ico#md5=ad34bb...
// @resource SRIsecured2 http://example.com/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...
// @require https://code.jquery.com/jquery-3.6.0.min.js#sha256-/xUj+3OJU...ogEvDej/m4=
Tampermonkey 本身支持 SHA-256 和 MD5 哈希值,其他所有哈希值(SHA-1、SHA-384 和 SHA-512)都依赖于 window.crypto
。
如果给出多个哈希值(用逗号或分号分隔),Tampermonkey 将使用当前支持的最后一个哈希值。所有哈希值都需要以十六进制或 Base64 格式编码。
GM_addElement
实验性
此功能是实验性的,可能会在未来的版本中更改。
TS GM_addElement(tag_name: string, attributes: ...): HTMLElement
TS GM_addElement(parent_node: ..., tag_name: string, attributes: ...): HTMLElement
GM_addElement('script', {
textContent: 'window.foo = "bar"'
})
GM_addElement('script', {
src: 'https://example.com/script.js',
type: 'text/javascript'
})
GM_addElement(document.getElementsByTagName('div')[0], 'img', {
src: 'https://example.com/image.png'
})
GM_addElement(shadowDOM, 'style', {
textContent: 'div { color: black; }'
})
GM_addStyle
TS GM_addStyle(css: string): HTMLStyleElement
将给定的样式添加到文档中,并返回注入的样式元素。
GM_addStyle(`
body {
background-color: orange;
}
`)
GM_download
TS GM_download(options: DownloadOptions): { abort(): boolean }
TS GM_download(url: string, name?: string): { abort(): boolean }
下载文件。
GM_download("http://example.com/file.txt", "file.txt")
const download = GM_download({
url: "http://example.com/file.txt",
name: "file.txt",
saveAs: true
})
// 5 秒后取消下载
window.setTimeout(() => download.abort(), 5000)
GM_getResourceText
允许用户脚本访问通过 @resource
包含在用户脚本中的资源(如 JavaScript 或 CSS 文件)的文本。
该函数接收一个参数,即要检索的资源的名称。它会以字符串形式返回资源文本。
下面是一个如何使用该函数的示例:
const scriptText = GM_getResourceText('myscript.js')
const script = document.createElement('script')
script.textContent = scriptText
document.body.appendChild(script)
GM_info
获取有关脚本和 TM 的一些信息。对象可能是这样的。