一个用于在 X(Twitter)时间线上自动翻译内容的 Chrome 插件,主打免费使用(无需翻译密钥)、自动识别、多语言支持。
本项目为 AI Coding 实践项目,基于 OpenAI Codex(GPT-5.3-Codex)完成开发与迭代。
- 自动识别页面中的推文正文(
data-testid="tweetText") - 自动识别并翻译推文内文章卡片标题(非中文)
- 免费可用,无需配置任何翻译 API Key
- 多语言翻译支持(中/英/日/韩/西等)
- 支持自动翻译可见推文
- 支持手动点击
Translate翻译单条推文 - 翻译结果本地缓存(7 天过期),减少重复请求
- 翻译请求节流(最小 800ms 间隔),降低接口抖动
- 限流保护(429 自动退避重试 + 短时冷却)
- 多翻译源自动切换(主服务限额/限流后自动降级到后备服务)
- 翻译按钮显示当前 Provider(如
MyMemory / Google GTX / LibreTranslate) - 自动隐藏带有
Ad标识的广告推文 - 右键支持:选中文字或图片可一键发送到 Grok(无需密钥、无需中转)
- Popup 中可配置:
- 插件开关
- 自动翻译开关
- 目标语言
content script注入到x.com页面,负责识别推文并渲染翻译 UIservice worker统一发起翻译请求(当前接 MyMemory 免费接口)- 翻译服务采用多 Provider 自动降级(MyMemory -> Google GTX -> LibreTranslate)
- 后台会自动做基础语言识别(zh/ja/ko/ru/en)后再调用接口,避免
AUTO参数报错 - 后台包含请求去重、请求节流、翻译缓存逻辑
chrome.storage.sync保存用户设置chrome.storage.local保存翻译缓存
- 打开 Chrome,进入
chrome://extensions - 打开右上角
开发者模式 - 点击
加载已解压的扩展程序 - 选择本项目目录
- 打开
https://x.com验证效果
规则:每次
manifest.json版本号变更时,必须同步更新本节。
- 修复翻译缓存写入失败会导致整次翻译失败的问题(缓存失败仅告警,不阻断翻译返回)
- 内容扫描由全量改为增量(基于 MutationObserver 根节点队列),降低 X 时间线频繁变更时的开销
- 插件关闭时新增页面回滚:恢复被隐藏广告推文、移除翻译 UI、清理已绑定标记
- 优化语言策略:未知语言不再强制回退
en,并在未知源语言时跳过 MyMemory - 增加图片链路大小保护与压缩降采样(超大图自动压缩,仍超限则跳过)
- 修复翻译容器无按钮场景下的潜在空指针问题,并增加并发翻译保护
- 右键菜单文案优化:
Send selected text to Grok改为使用Grok分析选定文字
- 右键菜单文案优化:
Send image to Grok改为让Grok分析图片内容
- 图片提示词从“请分析图片内容”调整为“中文介绍图片内容”
- 调整图片发 Grok 执行顺序:先注入文本提示,再附加图片,最后延迟提交
- 避免出现“先传图后写字”导致的上下文错位问题
- 图片发送 Grok 改为“优先文件上传注入”(通过文件输入控件注入图片)
- 键盘粘贴仅作为兜底路径,提升自动附图成功率
- 图片自动粘贴后新增延迟发送机制(默认等待约 3.2 秒)
- 延迟后再触发回车/提交按钮,降低图片尚未上传完成时发送失败概率
- 图片发 Grok 流程改回自动粘贴模式(自动触发
⌘V/Ctrl+V+ paste 尝试) - 粘贴后恢复自动发送流程
- 修复图片复制阶段
Unserializable argument passed错误 - 注入参数由
ArrayBuffer改为base64可序列化字符串传输
- 重构图片复制链路:由扩展后台下载图片二进制,再写入系统剪贴板
- 新增 X 图片域名权限(
pbs.twimg.com/*.twimg.com),修复复制阶段失败问题
- 调整图片发 Grok 流程为稳定模式:复制图片后仅填入提示词,不自动发送
- 由用户在 Grok 输入框手动按
Command+V粘贴图片再发送,避免跨站自动粘贴限制
- 右键图片发送 Grok 改为“复制图片本体到剪贴板”,不再发送图片 URL
- 打开 Grok 后自动尝试触发粘贴(
⌘V/Ctrl+V+ paste 命令) - 新增
clipboardWrite权限用于写入图片剪贴板
- 彻底重写 Grok 页面注入函数为老式兼容语法(
function/var) - 移除注入函数内潜在解析雷点,修复持续出现的行级语法报错
- 修复 Grok 自动提交轮询代码报错(移除 IIFE,改为直接
setTimeout调用)
- 清理
background.js中剩余可选链语法(?.),统一为显式判空写法 - 进一步降低旧环境下的脚本解析报错概率
- Grok 页面注入函数整体改为保守 ES 语法(
var/function) - 清理注入函数内高风险语法(如
catch {}、可选链等),降低兼容性报错概率
- 移除 Grok 注入脚本中的
try/catch与可选链写法,改为显式兼容判断 - 进一步降低页面注入脚本的语法兼容风险
- 修复 Grok 注入脚本在输入框类型判定处的运行时报错
- 注入流程改为“安全赋值 + 事件触发 + contenteditable 回退”策略
- 修复 Grok 注入脚本中输入框类型判断报错(
instanceof改为tagName/type判定)
- 修复 Grok 注入脚本语法错误(移除页面注入函数中的
await) - 提交按钮重试改为
setTimeout非阻塞轮询,避免 service worker 报错
- 修复右键菜单消失问题(background 注入函数改为 async,避免 service worker 启动异常)
- 新增启动阶段菜单重建(
onStartup+ 初始化兜底)
- 图片右键发送模板简化:仅保留“请分析图片内容 + 图片地址”
- 强化 Grok 自动发送:回车后增加提交按钮轮询点击兜底
- Grok 右键注入内容调整为中文提示模板(“请分析图片内容”“请介绍这个”)
- 注入完成后自动触发回车发送,并增加提交按钮点击兜底
- 修复 Grok 输入框自动填充失败问题(适配 ProseMirror
contenteditable结构) - 新增 Grok 注入重试机制,提升页面加载慢时的填充成功率
- 新增右键菜单:发送选中文字到 Grok
- 新增右键菜单:发送图片到 Grok
- 新增自动打开 Grok 并注入内容的流程(无密钥、无中转)
- README 项目描述重写:突出自动翻译、免费使用(无需密钥)、多语言支持
- Popup 标题增加 GitHub 跳转链接
- Popup 新增版权信息与 FEEI 官网链接
- 移除旧的翻译服务提示文案
- 修复日文误判为中文导致不翻译的问题(含假名文本不再走中文跳过)
- 修复卡片标题译文不显示问题(容器定位改为 ID 绑定)
- 统一支持“相邻插入”和“卡片外部插入”两种译文渲染路径
- 修复卡片标题译文显示位置:从卡片覆盖层改为卡片外部下方展示
- 避免译文压住图片/标题导致可读性问题
- 调整卡片文章标题翻译交互:不再显示翻译按钮,仅展示译文
- 推文正文保留按钮交互,卡片标题采用自动翻译输出
- 新增推文内文章卡片标题翻译(非中文标题自动注入翻译入口)
- 抽象通用节点绑定逻辑,统一处理推文正文与卡片标题
- 翻译按钮增加 Provider 标识(明确展示由哪家翻译服务提供)
- 缓存记录新增 provider 字段,缓存命中时也能显示来源
- 新增 Google GTX 后备翻译源,降低
429 + 400组合失败概率 - 优化后备接口错误处理(LibreTranslate 的
HTTP 400返回细化)
- 新增多翻译源自动切换(主服务不可用时自动切换后备服务)
- Provider 级限流冷却(单一服务 429 不会阻塞全部翻译)
- 新增 LibreTranslate 后备接口支持
- 新增 429 限流处理:自动退避重试
- 新增限流冷却窗口,避免连续请求导致反复报错
- 优化限流提示文案(包含建议重试等待时间)
- 新增翻译缓存(
chrome.storage.local,7 天 TTL) - 新增请求去重与节流(最小 800ms 间隔)
- 新增合规文档:
PRIVACY.md、STORE_LISTING.md
- 新增插件 Logo 与多尺寸图标(16/32/48/128)
- Popup 顶部展示品牌图标
- 统一项目名为
X Tweet Translator
- 中文推文默认跳过,不注入翻译入口
- 后台增加中文兜底(中文不发翻译请求)
- 新增广告推文隐藏(识别
Ad/广告标签)
- 修复 MyMemory
AUTO源语言报错 - 增加源语言规范化与基础识别逻辑
- 初始化 Chrome MV3 插件
- 支持推文识别、手动/自动翻译、Popup 设置
- 免费翻译接口存在配额和稳定性限制。
- 后续建议替换为可控翻译服务(如 DeepL / OpenAI / 自建服务)。
- X 页面 DOM 可能变化,选择器需要持续维护。
- 隐私政策草案:PRIVACY.md
- Chrome Web Store 上架文案草案:STORE_LISTING.md


