Tampermonkey 兼容性设置:让老脚本正常运行的适配层

用户脚本生态比 Tampermonkey 老——很多脚本是给 Greasemonkey(Firefox 上的前辈)3.x 时代写的,API 行为与今天有差异。官方主页对此的说明:Tampermonkey 为老脚本提供兼容层(compatibility layer),并会自动检测需要哪些适配选项。
兼容层解决什么
Greasemonkey 时代的脚本常见的历史习惯:
- 依赖旧的 GM 函数行为(同步语义、参数格式);
- 假设脚本运行在特定的全局环境里(如
this指向、forEach遍历 NodeList 等); - 使用旧式
@include通配。
Tampermonkey 的兼容性设置区(见上图)提供一组开关,逐项对齐这些历史行为。脚本大多能自动识别并按需开启,手动干预的场景是:老脚本装上后行为怪异,逐个开关试。
常见的兼容选项
| 选项 | 对齐的历史行为 |
|---|---|
| 兼容元数据解析 | 识别 Greasemonkey 时代的头部写法 |
| 兼容 forEach | 让 NodeList 等支持旧式遍历写法 |
| 兼容 wrappedJSObject | Firefox 上与页面对象交互的历史接口 |
| 兼容 powerful this | 旧脚本对回调 this 指向的假设 |
(各项以设置页实际显示为准,官方文档的 @sandbox 与兼容性条目有对应说明。)
装老脚本的检查顺序
- 先直接装,多数脚本兼容层自动搞定;
- 行为异常时看脚本说明页有没有标注「仅限 Greasemonkey」或要求的 API 版本;
- 打开兼容性设置逐项试;
- 确实跑不起来的年代久远脚本,考虑找替代维护版,或在 Script Update 设置里冻结它。
@sandbox 与兼容的关系
官方文档的 @sandbox 条目描述了运行环境的三个取值(raw / JavaScript / DOM),决定脚本注入到页面世界还是隔离环境——这层机制和兼容开关配合,覆盖了新旧脚本的运行需求。日常用户不需要动它,写脚本遇到「页面变量读不到」时再研究。