Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WordDrip · 沉浸式背单词浏览器扩展

CI Manifest V3 License Version

浏览中文网页时,把部分常见词替换成对应英文;悬停即可看到音标、释义、词根词缀拆解、例句,并给自己打分。评分会驱动 SM-2 间隔重复算法,决定每个词下次该在何时再次出现——让你在日常浏览中无痛记住单词。

这是一个纯本地、零追踪、无需账号的 Chrome / Edge(Manifest V3)扩展,复刻并增强自社区里一个同类插件的灵感。

🌐 在线体验(无需安装):imhw.github.io/worddrip/demo.html


📸 预览

浏览中文网页时,部分常见词被替换成英文——浅色 / 深色网页背景下都清晰可读:

网页替换效果(浅色背景)

悬停任意替换词,看到音标、释义、词根词缀拆解、例句,并给自己打分(驱动 SM-2 间隔重复):

悬停词根卡片    控制面板

设置页内置学习仪表盘——累计曝光、连续打卡、掌握度分布、30 天活跃热力图:

学习仪表盘


✨ 核心功能

功能 说明
网页沉浸替换 遍历页面文本,把命中词库的中文词替换成英文。同一段落可替换多词,自动跳过输入框、代码块、已替换区域
悬停解码卡片 鼠标移上去显示:英文 / 音标 / 词性 / 释义 / 词根词缀拆解 / 例句 / 学习状态 / 下次复习时间
SM-2 间隔重复 标准 SuperMemo-2 算法。四档反馈「忘了 / 模糊 / 认识 / 秒懂」更新难度系数与复习间隔,到期的词优先出现
状态可视化 替换词按学习状态着色:新词 / 学习中 / 复习中 / 已掌握,一眼看出熟练度
个性化策略 替换密度(轻 / 中 / 浓)、多词库勾选、音标开关、悬停自动朗读、网站黑名单
多场景词库 四级 / 六级 / 考研 / 雅思托福,可任意组合
学习仪表盘 累计曝光、主动复习、已掌握、连续打卡天数、近 30 天活跃热力图
数据自主 一键导出 / 导入 JSON 备份;所有数据只存在本机,绝不上传
发音 卡片内 🔊 或悬停自动朗读(Web Speech API,离线可用)

🚀 安装

方式一:开发者模式加载源码(推荐,便于更新)

  1. 下载本仓库(git clone 或 Code → Download ZIP 后解压)
  2. 打开 chrome://extensions(Edge 为 edge://extensions),右上角打开「开发者模式
  3. 点击「加载已解压的扩展程序」,选择 worddrip 文件夹
  4. 随便打开一个中文网页,部分词会变成英文——把鼠标移上去试试

改了代码后,回扩展页点该扩展的刷新图标 ⟳ 即可应用,无需重装。

方式二:下载打包版

Releases 下载 worddrip-vX.Y.Z.zip,解压后按方式一的第 2–3 步加载解压目录。

首次安装会自动打开设置页。点击工具栏图标可快速调节开关、密度与词库。


📦 自行打包发布

bash scripts/package.sh
# 打包前自动校验,产物输出到 dist/worddrip-vX.Y.Z.zip

脚本只收录扩展运行所需文件 + README/LICENSE,排除演示页、测试与开发文件。


🧪 不想装扩展?先看离线演示

直接在浏览器打开 demo.html 即可体验完整效果(内置一段示例文章 + 一个 chrome.storage 的 mock,复用真实的替换引擎):

cd worddrip
python3 -m http.server 8777
# 浏览器访问 http://localhost:8777/demo.html

🧠 工作原理

替换流程(两阶段,见 src/content/content.js

  1. 扫描:用 TreeWalker 遍历可见文本节点,匹配词库中文词(含别名,长词优先)。
  2. 选词:把候选交给 SM-2,按「到期优先」挑出本轮要替换的词(受密度上限约束)。
  3. 替换:逐文本节点构建 DocumentFragment 一次性替换,同一段落里的多个词都会被替换(这是相对常见实现的关键改进——逐个 replaceChild 会让同段后续词因节点脱离 DOM 而失败)。

替换期间会 disconnect MutationObserver、替换完再 reconnect,避免自己的 DOM 改动触发死循环;动态加载的新内容仍会被处理。

SM-2 算法(见 src/lib/srs.js

质量 q:0=忘了  3=模糊  4=认识  5=秒懂
q < 3  → reps 归零,interval 回到 1 天
q ≥ 3  → reps=1→1天, reps=2→6天, 之后 interval = round(interval × EF)
         EF += 0.1 − (5−q)(0.08 + (5−q)·0.02),下限 1.3
interval ≥ 21 天且连对 ≥ 3 次 → 标记「已掌握」

📁 项目结构

worddrip/
├── manifest.json              # MV3 清单
├── demo.html                  # 离线演示(无需安装扩展)
├── icons/                     # 16/48/128 图标
└── src/
    ├── data/wordbank.js       # 词库(200 词,含词根 / 例句 / 等级)
    ├── lib/srs.js             # SM-2 间隔重复算法
    ├── content/               # 内容脚本:扫描 + 替换 + 悬停卡片
    │   ├── content.js
    │   └── content.css
    ├── background/background.js# service worker:默认设置 + 图标徽标
    ├── popup/                 # 工具栏弹窗:开关 / 密度 / 词库 / 当日统计
    └── options/              # 设置与数据页:仪表盘 / 词表 / 黑名单 / 导入导出

➕ 扩展词库

src/data/wordbank.js 数组里加条目即可,无需改动其它代码:

{
  w: "example",            // 英文
  zh: "例子",               // 用于在中文网页匹配
  ipa: "/ɪɡˈzɑːmpl/",       // 音标
  pos: "n.",                // 词性
  lv: ["CET4"],             // 等级标签,决定它属于哪个词库
  root: "ex-(出) + ample(拿取) → 取出来给人看的样本", // 词根/词源/助记
  ex: ["This is a good example.", "这是个好例子。"],   // 例句 [英, 中]
  alt: ["示例", "范例"]      // 可选:额外可匹配的中文写法
}

🔒 隐私

  • 不请求任何网络权限,不收集、不上传任何数据。
  • 所有学习记录与设置都通过 chrome.storage.local 保存在你本机浏览器中。
  • 网站黑名单里的域名完全不会被处理。

📜 许可

MIT —— 自由使用、修改、分发。

About

沉浸式背单词 Chrome 扩展:浏览中文网页时把常见词替换成英文,悬停看词根,配合 SM-2 间隔重复

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages