JustZix vs Tampermonkey / Greasemonkey —— 有何不同、谁胜出、何时选哪个
Tampermonkey 15 年来一直是「用户脚本」的代名词。当有人说「我往页面里注入 JS」,他大概默认想的是 Tampermonkey。JustZix 做 Tampermonkey 做的一切,外加用户样式(像 Stylus),外加一个用户脚本没有的 UI 层。本文展示我们的不同之处。
功能对比
| 功能 | Tampermonkey | Greasemonkey | JustZix |
|---|---|---|---|
| URL 匹配时注入 JS | ✓(头部里的 @match) | ✓(@include) | ✓(scope.url) |
| 注入 CSS | ~(通过 GM_addStyle) | ~(通过 GM_addStyle) | ✓(专门的 CSS 规则) |
| 标签页里的实时编辑器 | ✗ | ✗ | ✓(CSS pane + JS pane) |
| 标签页里的 REPL | ✗ | ✗ | ✓(JS Console) |
| 带 UI 按钮的动作栏 | ~(GM_registerMenuCommand —— 在扩展弹窗里) | ~ | ✓(页面上可见的 6 种动作) |
| 通过 URL 分享 | ~(导出为 .user.js) | ~(导出) | ✓(TTL 1-48h 链接) |
| 多设备同步 | ✓(Tampermonkey Cloud —— 付费) | ✗ | ✓(chrome.storage.sync,免费) |
| 开源 | ~(免费版,但 Tampermonkey 是闭源) | ✓(Greasemonkey GPL) | ✓(MIT) |
| @require 外部脚本 | ✓ | ✓ | ~(在 JS 规则里 fetch) |
| GM_xmlhttpRequest(绕过 CORS) | ✓ | ✓ | ~(原生 fetch,受 CORS 限制) |
| 脚本市场 | greasyfork.org | greasyfork.org | 不适用(TTL 分享链接) |
Tampermonkey 胜出的地方
- @require + 外部库 —— 用户脚本可以通过 URL 导入 jQuery、Lodash。JustZix 需要内联代码或在 JS 规则里 fetch。
- GM_xmlhttpRequest —— 为跨域 API 调用绕过 CORS。JustZix 用原生 fetch —— 受页面 CORS 限制。
- greasyfork.org 市场 —— 数千个公开用户脚本。JustZix 没有中心化注册库(有意为之 —— TTL 分享)。
- 已有的用户脚本收藏 —— 如果你装了 50 个用户脚本,迁移是工作量。JustZix 不导入 .user.js(但你可以把脚本主体复制粘贴到一条 JS 规则里)。
JustZix 胜出的地方
- 标签页里的 UI 层 —— 页面上可见的带 BUTTON/SLIDER/TOGGLE3 的动作栏。Tampermonkey 只有扩展弹窗里的 GM_registerMenuCommand(在你点击工具栏图标前是不可见的)。
- CSS + JS 在一条规则里 —— 用户样式 + 用户脚本在一起,作用域相同。Tampermonkey 需要一个单独的 Stylus。
- 标签页里的实时编辑器 —— CSS pane / JS pane 让你无需 F5 就能迭代。
- 标签页里的 Output Console —— 无需 DevTools 调试,专用的
JUSTZIX.log通道。 - 吸附仪表盘 —— 栏 + pane 组织成组。Tampermonkey 在弹窗之外没有持久 UI。
把 3 个典型用户脚本迁移到 JustZix
脚本 1:「自动跳过 cookie 横幅」
Tampermonkey 用户脚本:
// ==UserScript==
// @name Cookie skip
// @match *://*/*
// @run-at document-end
// ==/UserScript==
(function() {
const obs = new MutationObserver(() => {
const accept = [...document.querySelectorAll('button')]
.find(b => /accept all/i.test(b.textContent));
if (accept) { accept.click(); obs.disconnect(); }
});
obs.observe(document.body, {childList: true, subtree: true});
})();
JustZix 迁移:
- 新文件夹「Auto-actions」
- 新规则「Cookie skip」,作用域:
*://*/* - JS 标签页:粘贴函数主体(不带 IIFE 包装器,不带用户脚本头部)
- Run-at:JustZix 默认用「document-end」—— 匹配
- 保存
脚本 2:「GitHub:复制 SHA」
Tampermonkey 用户脚本在提交哈希旁边加一个「复制 SHA」按钮。JustZix:
- 规则作用域:
https://github.com/* - JS 规则:同样的观察提交哈希元素的代码
- 另外:与其创建一个 DOM 按钮,不如在 JustZix 动作栏里用一个 BUTTON 动作「📋 SHA」—— 在视觉上和其他动作一致
脚本 3:「Reddit:隐藏广告」
Tampermonkey 用户脚本隐藏 .promoted 元素。JustZix:
- CSS 规则(不是 JS!)—— 更干净、更快:
.promoted, [data-promoted="true"] { display: none !important; } - 额外好处:加一个 TOGGLE3「Mode」(Default / 隐藏广告 / 隐藏广告+赞助)带 3 个状态的 CSS 变量
CSS 优先的模式往往比 JS observer 简单。
迁移的坑
- GM_* API 不一样。Tampermonkey:GM_setValue、GM_getValue、GM_xmlhttpRequest、GM_notification。JustZix:
chrome.storage.local/sync、原生fetch、JUSTZIX.log作为日志通道。 - @require 没有对应物。用户脚本可以通过 URL 导入 jQuery。在 JustZix 里你内联粘贴(压缩后约 10 KB)或
fetch + new Function(CSP 风险)。 - Tampermonkey Cloud Sync 是付费的。JustZix 的 chrome.storage.sync 免费但限 100 KB。超出 → chrome.storage.local(无同步)。实践中:50-100 条规则。
- greasyfork.org 有 JustZix 没有的脚本。如果你依赖某个特定的 greasyfork 用户脚本 —— 迁移要费点劲(复制主体、改 GM_* 调用)。现实地说:50% 的用户脚本不到 100 行,迁移约 5 分钟。
接下来做什么
- 从 Stylish/Stylus 迁移 —— 用户样式那边的对应文章
- 标签页里的迷你 IDE —— JustZix 在用户脚本之外多加了什么
- window.JZ + JUSTZIX —— GM_* API 的 JustZix 对应物
安装 JustZix —— Tampermonkey 可以并行存在。试 2 周,看哪个留下。
为这篇文章评分
暂无评分 — 成为第一个。