Tampermonkey的Instant注入模式工作原理是什么?与ViolentMonkey注入方式类似吗?
Tampermonkey Instant 注入模式说明
不同注入模式的核心区别
Tampermonkey的Inject Mode共提供三个可选配置,差异主要体现在注入时机和兼容性上:
Normal(默认模式):等待页面完成初始DOM解析后再注入脚本,对应document-end执行时机,兼容性最好,几乎不会出现脚本访问DOM报错的问题,缺点是脚本生效延迟高,修改页面元素的操作会被用户肉眼感知到。Instant(即时模式):注入时机早于所有页面原生代码执行,甚至早于document-start阶段,适合需要拦截页面原生逻辑、修改全局JS对象的脚本,缺点是如果脚本没有做DOM加载判断,直接访问DOM元素会抛出找不到节点的错误。Compatibility(兼容模式):完全调用浏览器原生的Content Script注入机制,适配有严格CSP限制的特殊站点,注入延迟是三种模式里最高的。
Instant 模式的运行逻辑
- 浏览器发起页面请求后,只要接收到响应头,Tampermonkey就会启动注入流程,不需要等待页面响应体加载、DOM树构建
- 脚本会被插入到页面上下文的最顶端,执行优先级高于页面所有内联、外部引入的原生JS代码
- 注入过程自动绕过页面的CSP限制,不需要修改页面响应头就能正常运行
- 脚本实际执行时机还是遵循自身的
@run-at配置:如果声明了@run-at document-start会立刻执行,声明了@run-at document-end或@run-at document-idle的脚本还是会等待对应时机触发。
与ViolentMonkey注入机制的相似度
两者核心注入逻辑高度相似:
ViolentMonkey默认采用的就是和Tampermonkey Instant模式一致的早注入逻辑,默认会在最早可用的时机把脚本注入页面,同样支持绕过页面CSP限制,也支持拦截页面原生JS的执行。
唯一差异是ViolentMonkey没有把注入逻辑做成可手动选择的配置项,而是默认启用早注入逻辑,只有当检测到当前站点注入失败时,才会自动降级到类似Tampermonkey Compatibility模式的兼容注入逻辑。
内容的提问来源于stack exchange,提问作者Nightfall
相关产品推荐
相关产品推荐

