编程
一个能直接开工的 Chrome 扩展:formant
formant 把翻译、New Tab、书签同步、代理、站点数据、GitHub 打包下载、V2EX 增强、自动翻页等日常浏览器需求收进同一套 MV3 扩展,设置统一进 option 面板,密钥留在 mono,适合当日常工具,也适合当扩展架构参考。
formant 把翻译、New Tab、书签同步、代理、站点数据、GitHub 打包下载、V2EX 增强、自动翻页等日常浏览器需求收进同一套 MV3 扩展,设置统一进 option 面板,密钥留在 mono,适合当日常工具,也适合当扩展架构参考。
很多浏览器扩展不是难在写一个功能,而是难在把一堆常用能力收进同一壳子里还不互相踩脚。
翻译要有弹窗和划词,新标签页要有天气和汇率,书签要能同步到自家服务,GitHub 上偶尔要打包下目录,V2EX 想自动签到,翻页列表懒得点下一页,代理和扩展开关又不想再装四五套工具。每样单独装一个扩展,权限重复、图标挤满工具栏,设置散落各处;从零写又要反复处理 Service Worker 生命周期、右键菜单冲突、content script 污染宿主页这些问题。
formant 就是为这类重复劳动准备的:Chrome Manifest V3,原生 HTML / CSS / JS,后台能力走 Oolaf mono 的 Client API。不是只有一个演示按钮的空壳,而是已经把日常高频场景串进同一产品里的工程。

1. 解决什么问题
解决「装一堆扩展还对不齐」的问题
日常上网经常同时需要:
划词或弹窗翻译
新标签页信息卡
书签备份到自己的服务
图片另存为指定格式
公开仓库打包下载
站点 Cookie / Storage 查看
代理快速切换
扩展启用禁用
列表页自动翻页
某个站点的小增强
这些能力如果分散在不同扩展里,菜单冲突、权限重复、设置找不到都是常态。formant 用一套 option.html 壳层挂多个面板,功能总开关集中在 #features,单项细节进对应锚点;工具栏图标始终打开 formant popup,不把入口让给某个子模块。


解决「扩展里密钥乱放」的问题
翻译 GPT、百度、天气代理这类密钥不写进扩展仓库。扩展本地只保存 mono Base URL 和 Client API Key;服务端密钥放在 mono Admin 的 Formant 配置组。失败兜底链路也固定:Google 直连失败走 mono Google,再不行用百度;路由打分读词库合并结果,不把静态词表当唯一真相。
解决「内容脚本把宿主页搞脏」的问题
划词面板、GitHub 下载进度、AutoPagerize 状态条尽量用 Shadow DOM 隔离样式。与页面通信走 chrome.runtime / chrome.tabs,不把密钥塞进 content script 全局。Service Worker 按可重入写,重要状态落 chrome.storage,不假设后台长期常驻。
解决「新功能不知道往哪挂」的问题
目录按模块拆:
translate-*.js 翻译路由、打分、接口
lexicon/ 与 lexicon-runtime.js 词库包
newtab* New Tab 与部件
sync.js / home-sync.js 书签与主页同步
gitzip/ + gitzip-bridge.js 公开 GitHub 下载
v2ex-plus/ + v2ex-bridge.js V2EX 衍生能力
autopagerize/ 自动翻页
proxy-* / extensions-manager.js / site-data* 轻量工具
option-*.js 各设置面板
新能力优先加面板模块,不为单项功能另开独立 options 页;formant 自有源码单文件控制在 500 行附近,避免 background 和 popup 无限膨胀。
2. 特点和功能
智能翻译
入口包括 popup 输入框、划词浮标、右键「用 formant 翻译」。模式支持自动 / Google / GPT / 全部。本地打分综合脚本嗅探、词库命中和句式:简单偏 Google,复杂可并行 GPT。原文和译文都有读音。默认模式与目标语言写入 chrome.storage.local,popup 与划词共用。

词库包
内置 en / zh / ja / ko / tr 俚语包只读,可启用停用。自定义包存在本机 storage,支持 JSON 导入(新建 / 合并 / 替换)。打分走 ensureLexiconReady() 合并结果。管理在 option.html#lexicon。

New Tab
覆盖浏览器新标签页,布局可同步 mono。第一行四卡等宽:天气、假期、汇率、热点英语。天气由后台 alarm 约每十分钟单独刷新;热点英语默认展示可配置词数,释义与谐音默认马赛克,点击揭开,支持单词连读与整卡发音,已会词可剔除补位。壁纸、遮罩、城市等集中在 #newtab;mono 连接仍在 #sync。

书签同步
监听书签变更防抖上传,也可手动同步。写入 mono 共享书签池,适合多机对齐同一套收藏。

图片另存为
图片右键可选 PNG / JPG,转码在扩展内完成,依赖 downloads 权限。

GitZip(公开仓库)
在 GitHub 仓库、目录、文件页勾选后打包下载;支持单文件、目录 ZIP、多选、整仓。只走公开 API,不保存 GitHub PAT,不接 OAuth。匿名接口有速率上限,大目录或频繁重试可能被限流,面板会提示。设置在 #gitzip,总开关关闭后注入与菜单一起停掉,popup 入口不变。

V2EX Plus
整合自上游 GPLv3 衍生模块:自动签到、未读角标、主题预览与楼中楼、用户卡、sov2ex 等。兼容字段仍用 chrome.storage.sync.options。总开关关闭后停 alarm、badge、DNR 与内容增强,不改写工具栏点击行为。分发含该模块时整体按 GPLv3 处理。

AutoPagerize
滚动到底部自动插入下一页内容。内置大量站点 XPath 规则,另有 Google / Bing 等优先覆盖;可配排除列表与状态条。同域带 cookie 拉取,跨域才走 background;解析后去掉脚本再插入,避免在宿主页执行远端脚本。

轻量代理
基于 chrome.proxy.settings:直连、系统代理、PAC(URL 或本地脚本)、最多五条固定服务器。默认偏系统代理;固定代理默认端口 7890。完整配置在 #proxy,popup 只做快捷切换。不做代理认证,也不整包嵌入第三方代理扩展源码。

轻量扩展管理
用 chrome.management 列出本机扩展,支持搜索与启用禁用,排除 formant 自身。入口只在 #extensions,popup 不放列表。不做分组、锁定、别名那一套。

站点数据
popup 二级视图读取当前 http/https 页的 Cookie、localStorage、sessionStorage。进入与切 Tab 自动拉取;可复制、单条删除、整页清除(均需确认)。Cookie 经 background 转发。不做跨站批量写入。

JSON Prettify
DevTools 面板与内容脚本查看器,方便直接看接口返回。

功能开关与权限边界
各模块有总开关,关闭后停运行时行为,配置尽量保留。权限按能力声明:alarms、bookmarks、contextMenus、cookies、downloads、management、proxy、scripting、storage 等;GitHub、V2EX、Imgur 等 host 按需列出。右键菜单按自有 ID 增删,不随意 removeAll() 清掉别人的菜单。

3. 和 mono 怎么配合
扩展侧配置:
环境:dev(本地 mono)或 prod
Client API Key(Admin 签发)
服务端配置(示例):
formant.translate.* 翻译通道
formant.weather.* / formant.exchange.* New Tab 部件
formant.vocab.model_key / formant.vocab.card_size 热点英语
formant.newtab.default_home 默认主页布局
Client 路由覆盖 New Tab 数据、翻译代理、书签同步、词汇卡等。密钥只放 Admin,不进扩展仓库。
4. 本地怎么加载
Chrome 打开 chrome://extensions,打开开发者模式
「加载已解压的扩展程序」,选中仓库里的 formant/ 目录
打开 option.html#sync,填 mono 环境与 Client API Key
按需在 #features 打开要用的模块,再到对应面板细调
版本号以 formant/manifest.json 的 version 为准。
5. 适合当什么用
日常浏览器工具:翻译、New Tab、同步、代理、站点数据一条链路
扩展工程参考:MV3 模块拆分、Shadow DOM 隔离、功能开关、与自建 API 的配置边界
二次整合参考:上游能力(V2EX Plus、GitZip、AutoPagerize)如何保留许可说明并接到统一壳层
不是「装完就能替代所有垂直扩展」的口号产品,而是把高频能力收进同一套可维护结构里的实装工程。要改某一块,从对应 bridge / option 面板顺着入口读即可。
暂无评论
确认操作
请再次确认编辑图片
待上传图片 (剩余 0 张)
项目详情
确认评论邮箱
邀请制评论